我的User
has_many addresses
。我需要两个地址:家庭和办公室。我有address_type
列,以表明它是否" Home"或" Office"。
所以我使用嵌套并构建两次。
// controller
def edit
@user = User.find(params[:id])
2.times { @user.addresses.build }
end
// view
<%= form_for @user do |f| %>
<% f.fields_for :addresses do |ff| %>
<h2>Home Address</h2>
...
<%= ff.hidden_field :address_type, value: "Home" %>
<% end %>
<% end %>
在构建家庭和办公室表单时,我希望 h2 和隐藏字段的值不同。
有没有办法将参数传递给build
?我想让我的fields_for
看起来像:
<% f.fields_for :addresses do |ff| %>
<h2><%= the_param %> Address</h2>
...
<%= ff.hidden_field :address_type, value: <%= the_param %> %>
<% end %>
由于
答案 0 :(得分:3)
是的,您可以将参数传递给build
。你可以做类似的事情:
// controller
def edit
@user = User.find(params[:id])
[ 'Home', 'Office' ].each { |type| @user.addresses.build(address_type: type) }
end
然后在您的视图中,您可以让表单构建器获取值!对于隐藏的领域。就h2
而言,您可以使用address
访问当前的ff.object
对象。
// view
<%= form_for @user do |f| %>
<% f.fields_for :addresses do |ff| %>
<h2><%= ff.object.address_type %> Address</h2>
...
<%= ff.hidden_field :address_type %>
<% end %>
<% end %>