如何在控制器中构建嵌套表单的子项

时间:2011-07-16 20:52:49

标签: ruby-on-rails ruby ruby-on-rails-3 nested nested-forms

我知道如何在控制器中构建第二个对象,但是如何构建第三个或第四个?

在我的情况下,我需要建立3。

Location - has_many :product_dates, :products
ProductDate - has_many :products & belongs_to :location
Product - belongs_to :location, :product_date

我轻松构建位置和产品日期:

def new
  @location = Location.new
  @location.product_dates.build
end

现在我需要在表单上构建产品。谁能告诉我怎么做?

编辑:完整答案:

def new
    @location = Location.new
    product_date = @location.product_dates.build
    product_date.products.build
end

    <%= form_for @location do |f| %>
    <%= f.text_field :business %>
    <%= f.text_field :address %>

    <%= f.fields_for :product_dates do |date| %>
    <%= date.date_select :date %>

    <%= date.fields_for :products do |product| %>
    <%= product.text_field :name %>
     <%= product.text_field :price %>
    <%= product.text_field :tag_list %>
    <% end %>
    <% end %>
    <%= f.submit "Create" %>        
<% end %>

2 个答案:

答案 0 :(得分:4)

您将学习所有内容in video here

编辑:

用以下内容更改嵌套部分:

<%= f.fields_for :product_dates do |date| %>
  <%= date.date_select :date %>
  <%= date.fields_for :products do |product| %>
   <%= product.text_field :name %>
   <%= product.text_field :price %>
   <%= product.text_field :tag_list %>
  <% end %>
<% end %>

因为products嵌套在product_dates

答案 1 :(得分:2)

添加到您的控制器:

def new
  @location = Location.new
  @product_dates = @location.product_dates.build
  @product = @product_dates.product.build
end

在您的ProductDate模型中:

class ProductDate < ActiveRecord::Base
  accepts_nested_attributes_for :products
...

你的位置模型:

class Location < ActiveRecord::Base
  accepts_nested_attributes_for :product_dates
...

你的形式应该是这样的:

<% f.fields_for :product_dates do |date| %>
  <%= date.text_field :content %>
  <% date.fields_for :products do |product| %>
    <%= product.text_field :content %>
  <%end %>
<% end %>