在嵌套表单上发送错误的参数

时间:2014-02-11 12:24:27

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

我遇到了通过关系使用has_many的模型实现嵌套表单的问题

我有3个模型:预订,表格和集合(这两个的加入模型)

在我的预约控制器中,我有以下两种方法:

  def new
    @reservation = Reservation.new
    @tables = Tables.all
    @tables.size.times {@reservation.collections.build}
  end

def reservation_params
  params.require(:reservation).permit(:name, collections_attributes: [ :table_id, :units_sold],
          tables_attributes: [:units, :title])
end

我的表单视图如下:

    <%= form_for [current_user, @reservation] do |f| %>

<header>
    <h1>Make Reservation</h1>
</header>

    <%= f.text_field :name,         placeholder: "Name" %>

    <%= f.fields_for :collections  do |builder| %>
        <%= render 'nested_form', :f => builder %>
    <% end %>

    <%= f.submit "Save" %>     

<% end %>

和我的_nested_form.html.erb文件:

<%= f.number_field :units_sold,     placeholder: "Units" %>
<%= check_box_tag  :table_id %>

我的问题是,每当我在数据库中保存新条目时,他都会将相同的table_id分配给所有集合关联,例如:

我想收到参数哈希,例如:

 "collections_attributes"=>{"0"=>{"units_sold"=>"5", "table_id"=>"1"}, "1"=>{"units_sold"=>"6", "table_id"=>"2"}}}

相反,我得到的是:

"collections_attributes"=>{"0"=>{"units_sold"=>"5", "table_id"=>"1"}, "1"=>{"units_sold"=>"6", "table_id"=>"1"}}}

如何解决这个问题,为每个集合提供正确的table_id?

1 个答案:

答案 0 :(得分:0)

如果你提供你的模型会更好。显示其关联的片段。

无论如何,根据你的表格; One Reservation有很多表格。

变化:

<%= check_box_tag  :table_id %>

<% @tables.each do |table| %>
  <li>
    <%= f.radio_button :table_id %>
    <%= f.label :table_id, table.name %>
  </li>
<% end %>

通过这个,你可以使用单选按钮从每个集合中选择一个表。

希望这会有所帮助!