2011-07-16 14 views
2

コントローラに2番目のオブジェクトを作成する方法は分かっていますが、3番目または4番目の方法はどのように作成しますか?私は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 

今私は、フォーム上の製品を構築する必要があります。誰も私にこれを行う方法を示すことができますか?

EDIT:完全な答え:

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

答えて

4

あなたはすべてin video hereを学びます。

EDIT:

変更にネストされた一部:あなたProductDateモデルに

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

<%= 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

+0

しかし、それは「回」機能を使用して、私はそれを必要としない、ちょうど私それぞれに1つのインスタンスが必要です。 – LearningRoR

+1

ループしないで 'times'を削除してください:) – apneadiving

+0

どのようにループしませんか?私はループが何であるか分かりません。 – LearningRoR

2

内にネストされています。

あなたの場所のモデルで
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 %> 
+0

誰でも既存の日付を表示したい場合は、それが新しいレコードかどうかをテストするif文を追加できます。 – BKSpurgeon

関連する問題