2012-05-23 27 views
2

我的模型看起來是這樣的(精簡到最低限度,對於這個問題):質量任務2級深?

class Translation < ActiveRecord::Base 
    has_many :array_resources 
end 
class ArrayResource < ActiveRecord::Base 
    attr_accessible :array_items 
    has_many :array_items 
    accepts_nested_attributes_for :array_items 
end 

現在,在我的Translation模式,我有我稱之爲array_resources.build(params)的方法,其中params是哈希值的數組,其中每個散列還包含一個:array_items鍵,映射到另一個散列數組。

不幸的是,我得到以下錯誤:

ActiveRecord::AssociationTypeMismatch in ProjectsController#create

ArrayItem(#69835262797660) expected, got Hash(#18675480)

我閱讀每對方的回答談到使用accepts_nested_attributes_for,但我已經做到了。幫幫我?

+0

您可以添加控制器(創建方法)和查看文件的相關代碼嗎? – HungryCoder

回答

2

您不應該直接指定嵌套屬性array_items,而應該指定array_items_attributes

你應該讓:array_items_attributes訪問:

class ArrayResource < ActiveRecord::Base 
    attr_accessible :array_items_attributes 

然後在您的PARAMS哈希使用密鑰:array_items_attributes,而不是:array_items

+0

太棒了,工作。但是,我怎麼會發現這一點呢? 'has_many'的文檔沒有提到添加'collection_attributes ='方法的任何信息。它從何而來? – Felix

+2

如果你不知道你在找什麼,那麼這些文檔可能很難找到。當你調用accept_nested_attributes_for而不是當你通過has_many創建一個關聯時,屬性編寫器方法被定義。這是一個鏈接到文檔(請參閱示例)。 http://apidock.com/rails/ActiveRecord/NestedAttributes/ClassMethods/accepts_nested_attributes_for –