Данные между разделами и родительским представлением Ruby on Rails

#ruby-on-rails #model-view-controller #partials

#ruby-on-rails #модель-представление-контроллер #частичные

Вопрос:

Итак, у меня есть new.html.erb, который содержит форму для нового объявления. В этом представлении отображается раздел для загрузки изображений с именем _upload_control.html.erb. Он содержит <%= file_field_tag:fileupload %> и я пытаюсь сослаться на загруженный в new.html.erb файл, чтобы получить файл в родительском контроллере. Есть ли способ сделать это?

Комментарии:

1. что? Какое отношение доступ к частичным данным из родительского представления (что не имеет смысла) имеет к доступу к ним из контроллера?

2. ну, контроллер имеет доступ к хэшу параметров, заполненному данными из формы. частичный рендеринг im в форме используется для загрузки нескольких файлов для другого объекта, поэтому он не использует ‘f’. поэтому мне нужен какой-то способ передачи файла в родительское представление, чтобы я мог получить к нему доступ через хэш параметров в контроллере. имеет ли это какой-либо смысл?

3. нет. форма отправляется контроллеру — находится ли эта форма в представлении или в частичном виде, не имеет значения. Если форма включает частичную часть с полями в ней, то при отправке этой формы эти поля из частичной части также будут отправлены.

4. это помогло бы прояснить некоторые вещи, если бы вы опубликовали код для вашего нового.html.erb, рассматриваемого фрагмента и, возможно, контроллера

Ответ №1:

Согласно вашему комментарию

The partial i'm rendering in the form is used to upload multiple files for a different object, so its not using 'f'

Вы должны использовать f(form builder) и должны передавать свой конструктор форм в locals, чтобы ваш partial можно было вызывать с помощью этого конкретного конструктора форм, что-то вроде:

 <%= form_for resource1 do |f|  %>
  <%=  render :partial => 'upload_control', :locals => { :f => f }  %>
<% end %>

<%= form_for resource2 do |builder|  %>
  <%=  render :partial => 'upload_control', :locals => { :builder => f }  %>
<% end %>
 

и ваш частичный _upload_control.html.erb

 <%= f.file_field :fileupload %>