Rails 4 - 将参数传递给嵌套表格?

时间:2014-03-19 02:24:58

标签: ruby-on-rails ruby-on-rails-4

我的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 %>

由于

1 个答案:

答案 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 %>