我正在努力让nested model forms视图正常工作。据我所知,我做的一切都是正确的,但它仍然不起作用。
我正在使用Rails 3 beta 3。
我的模型符合预期:
class Recipe < ActiveRecord::Base
has_many :ingredients, :dependent => :destroy
accepts_nested_attributes_for :ingredients
attr_accessible :name
end
class Ingredient < ActiveRecord::Base
attr_accessible :name, :sort_order, :amount
belongs_to :recipe
end
我可以按预期使用Recipe.ingredients_attributes =:
recipe = Recipe.new
recipe.ingredients_attributes = [ {:name=>"flour", :amount=>"1 cup"}, {:name=>"sugar", :amount=>"2 cups"}]
recipe.ingredients.size # -> 2; ingredients contains expected instances
但是,我无法使用参数哈希as shown in the documentation创建新的对象图:
params = { :name => "test", :ingredients_attributes => [ {:name=>"flour", :amount=>"1 cup"}, {:name=>"sugar", :amount=>"2 cups"}] }
recipe = Recipe.new(params)
recipe.name # -> "test"
recipe.ingredients # -> []; no ingredient instances in the collection
我在这里做错了吗?或者Rails 3测试版中是否存在问题?
这是食谱中attr_accessible :name
引起的错误。这不是Rails3特有的。
答案 0 :(得分:3)
您是否尝试过保存记录但仍然没有成分?从上面的例子来看,没有保存,所以我不相信配方有任何成分。
在回答下面的回答时,我相信您可以将ingredients_attributes
添加为attr_accessible
。
答案 1 :(得分:1)
我找到了答案:配方中attr_accessible :name
的存在会破坏ingredients_attributes(因此嵌套的模型形式)。删除它,一切正常。我已经证实这个bug至少存在于Rails 2.3.2之前。
关闭提交bug report ...
答案 2 :(得分:0)
我已经确认它不是一个Rails 3错误;我在2.3和3.0中都构建了Railscast example,它的工作方式与两种情况一样。这意味着它与我的代码有关。