Эй, у меня есть куча форм для разных контроллеров на одной странице. Это потому, что есть куча моделей, которые накладываются друг на друга, и это лучший способ их редактировать.
Я использую партиалы для включения каждой формы в представление, передавая локальные значения для объекта и параметры URL, которые будут использоваться form_for
Первый (верхний уровень) частичный вид:
- form_for :person, local_assigns[:obj], :url => local_assigns[:url] do |person_form|
= person_form.error_messages
%p
= person_form.label :first_name
= person_form.text_field :first_name
%p
= person_form.label :last_name
= person_form.text_field :last_name
%p
= person_form.submit 'Save'
- if local_assigns[:obj]
= link_to 'Destroy', local_assigns[:obj], :confirm => 'Are you sure?', :method => :delete
, который включен в представление через
= render :partial => 'person_form', :locals => { :url => { :controller => 'people', :action => 'create' }, :obj => @person }
для создания новой персоны и
= render :partial => 'person_form', :locals => { :url => "people/update/#{person.id}", :obj => person }
в этом блоке:
- Person.all.each do |person|
для редактирования всех существующих людей.
Моя проблема в том, что для каждой формы, за исключением первого (верхнего уровня) человека, создающего и редактирующего формы, действие устанавливается на текущий контроллер.
Частицы form_for для всех остальных форм очень похожи:
- form_for :day, local_assigns[:obj], local_assigns[:url] do |day_form|
= day_form.error_messages
%p
= day_form.label :effective_date, 'Date'
= day_form.datetime_select :effective_date
= day_form.label :person_id
= day_form.collection_select(:person_id, Person.all, :id, :full_name, { :selected => local_assigns[:ref] ? local_assigns[:ref].id : 1 } )
%p
= day_form.submit 'Save'
- if local_assigns[:obj]
= link_to 'Destroy', local_assigns[:obj], :confirm => 'Are you sure?', :method => :delete
включено через
= render :partial => 'day_form', :locals => { :url => { :controller => 'days', :action => 'create' }, :obj => @day, :ref => person }
для формы создания и
= render :partial => 'day_form', :locals => { :url => "days/update/#{day.id}", :obj => day, :ref => person }
для редактирования форм.
Две модели, Персона и День, связаны между собой человеком, имеющим много: дней и дней, принадлежащих: человеку. Все ассоциации настроены правильно и работают, проблема в том, что все формы отображаются на разных контроллерах для создания правильного URL-адреса действия.
Есть предложения?
(я использую haml кстати)