2

我正在尝试使用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)并在视图中访问它。

我怎么能这样做?欢迎任何关于更好实施的建议。

4

2 回答 2

0

您能否将表单提取到一个部分中,该部分将“:bar”或“:baz”字段作为本地,由渲染该部分的视图传递?

IE

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

上述行将在 first_view 中调用,部分将包含所有表单逻辑和标记,使用“text_field_param”作为专用文本字段。

于 2010-10-13T23:48:25.307 回答
0

最后,我决定采用简单、万无一失的解决方案。我现在已将其form_for移至单个视图中,并将一般字段放在部分视图中。这意味着我必须复制form_for以及渲染部分,但我可以忍受。

于 2010-10-16T13:40:43.147 回答