Передать экземпляр или локальную переменную из макета для просмотра в Rails - PullRequest
2 голосов
/ 14 октября 2010

Я пытаюсь настроить довольно сложную форму, используя form_for. Эта форма должна находиться в нескольких представлениях, где некоторые поля будут доступны для всех действий, а другие - для каждого отдельного действия.

Я думал, что для того, чтобы сэкономить дублирование кода, я использовал бы макет для отображения общей части, например:

# layout.html.erb
<%= form_for @instance do |f| %>
  <%= f.text_field :foo %><!-- This field needs to be available in all views -->
  <...><!-- Additional non-form related html -->
  <%= yield %>
  <%= f.submit %>
<% end %>

# first_view.html.erb
<% f.fields_for :bar do |b| %>
  <%# Fields %><!-- These fields should only be available in first_view -->
<% end %>

# second_view.html.erb
<% f.text_field :baz %><!-- This field should only be available in second_view -->

Теперь проблема в том, что я не могу передать f как локальную переменную из макета в представление. Я даже не могу установить переменную экземпляра (например, @f = f) и получить доступ к ней в представлениях.

Как я мог это сделать? Любые предложения по улучшению реализации приветствуются.

Ответы [ 2 ]

0 голосов
/ 16 октября 2010

В конце концов, я решил пойти с простым, надежным решением. Теперь я переместил form_for в отдельные представления и поместил общие поля в частичное. Это означает, что я должен дублировать form_for, а также рендеринг частичного, но я могу жить с этим.

0 голосов
/ 14 октября 2010

Не могли бы вы извлечь форму в партиал, который принимает поля ': bar' или ': baz' как локальное, которое передается представлением, визуализирующим этот партиал?

т.е.

render :partial => 'complex_form' :locals => { :text_field_param => :bar }

Вышеуказанная строка будет вызываться в first_view, а частичное будет содержать всю логику формы и разметку, используя 'text_field_param' для специализированного текстового поля.

...