5

目前,一個項目belongs_to的一個公司的has_manyItemVariants複數爲fields_for的has_many關聯在圖中未示出

我試圖使用嵌套fields_for通過Item窗體添加ItemVariant字段,但使用:item_varariants不顯示窗體。它僅在使用單數時顯示。

我檢查了我的關聯關係,他們似乎是正確的,是否可能與項目嵌套在公司之下有關係,還是我缺少其他內容?

在此先感謝。

注意:以下代碼段中省略了不相關的代碼。

編輯:不知道這是否相關,但我使用CanCan進行身份驗證。

的routes.rb

resources :companies do 
    resources :items 
end 

item.rb的

class Item < ActiveRecord::Base 
    attr_accessible :name, :sku, :item_type, :comments, :item_variants_attributes 


    # Associations 
    #----------------------------------------------------------------------- 
    belongs_to :company 
    belongs_to :item_type 
    has_many :item_variants 

    accepts_nested_attributes_for :item_variants, allow_destroy: true 

end 

item_variant.rb

class ItemVariant < ActiveRecord::Base 
    attr_accessible :item_id, :location_id 

    # Associations 
    #----------------------------------------------------------------------- 
    belongs_to :item 

end 

項/ new.html.erb

<%= form_for [@company, @item] do |f| %> 
    ... 
    ... 
    <%= f.fields_for :item_variants do |builder| %> 
    <fieldset> 
     <%= builder.label :location_id %> 
     <%= builder.collection_select :location_id, @company.locations.order(:name), :id, :name, :include_blank => true %> 
    </fieldset> 
    <% end %> 
    ... 
    ... 
<% end %> 

回答

6

你應該預填充@item.item_variants一些數據:

def new # in the ItemController 
    ... 
    @item = Item.new 
    3.times { @item.item_variants.build } 
    ... 
end 

來源:http://rubysource.com/complex-rails-forms-with-nested-attributes/

+1

謝謝!工作完美,但作爲參考,我使用RailsCast ep 196-Nested-model-form-revised。在他的新動作中,它只包含「@survey = Survey.new」而沒有關聯關係。任何想法爲什麼我需要建立協會和瑞安沒有/沒有? – 8bithero

+1

雖然railscast會更好,但它很複雜,因爲它可以動態地在調查表中添加問題。所以它不需要預先填充任何東西。 – rewritten

+0

我只是想爲那些對.build感到困惑的人添加一些含義,以及爲什麼Ryans不需要它。如果您在第3行的appliation_helper中查看他的代碼,則可以創建類實例。這代替了.build。希望這可以幫助其他任何人! –

2

嘗試這種方式

item controllernew action

def new 
    ... 
    @item = # define item here 
    @item.item_variants.build if @item.item_variants.nil? 
    ... 
end 

item/new.html.erb

<%= form_for @item do |f| %> 
    ... 
    ... 
    <%= f.fields_for :item_variants do |builder| %> 
    ... 
    <% end %> 
    ... 
    ... 
<% end %> 

更多請見視頻 - Nested Model Form

+0

感謝。得到它的工作,但使用'@item.item_variants.build如果@ item.item_variants.nil?'不起作用。它只適用於我刪除if語句。 此外,使用修訂版本的鏈接是讓我困惑的。在他的控制器中,他不使用.build。他只創建@survey實例。任何想法爲什麼我需要建立協會和瑞安沒有/沒有? – 8bithero