has_many通过关联的嵌套表单

时间:2014-02-07 13:24:19

标签: ruby ruby-on-rails-4

我有两个模型,保留和表,has_many通过它们之间的关系,连接表和模型集合,有一个单独的属性叫做:units_sold

我的预订模式:

class Reservation < ActiveRecord::Base

  has_many :tables, through: :collections
  has_many :collections
end

我的桌子型号:

class Table < ActiveRecord::Base

  has_many :reservations, through: :collections
  has_many :collections
end

最后是收集模型:

class Collection < ActiveRecord::Base

  belongs_to :table
  belongs_to :reservation
end

E.g:

以我的名义为9人预订(:units_sold)有2个表,每个表的容量为6,我想在一个表中有4个人,在第二个表上有5个人

我现在所拥有的是:

reservation_params

def reservation_params
  params.require(:reservation).permit( :name, :total_units, table_ids: [],
                                collection_attributes: [ :units_sold],
                                table_attributes: [:capacity, :title])
end

和我提交预订的表格:

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

<header>
    <h1>Make your reservation</h1>
</header>

    <%= f.text_field :name,         placeholder: "Name" %>
    <%= f.number_field :total_units,     placeholder: "How many people..." %>
    <%= f.fields_for :collections  do |c|%>
        <% @tables.each do |p| %>

            <label for="<%= p.title %>"><%= p.title %></label>
            <%= c.number_field :units_sold,     placeholder: "People per table..." %>
            <%= check_box_tag "reservation[table_ids][]", p.id %>
        <% end %>
    <% end %>
    <%= f.submit "Save" %>     

<% end %>

我应该如何在预订控制器中执行reservation_params?并将表单嵌套为:每个表/预约关联的units_sold

1 个答案:

答案 0 :(得分:0)

首先,您应该定义如下的关联:

has_many:collections

has_many:预订,通过:: collection

,首先定义集合,然后通过集合进行预订。同样,更新Table模型中的关联。

然后在定义关联后的预留模型中,添加以下行:

accepts_nested_attributes_for:collections

在reservation_params中,键“collection_attributes”和“table_attributes”应分别为“collections_attributes”和“tables_attributes”。