嵌套对象窗体无法按预期工作

时间:2010-05-23 23:02:30

标签: ruby-on-rails ruby forms nested

我正在努力让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特有的。

3 个答案:

答案 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,它的工作方式与两种情况一样。这意味着它与我的代码有关。