Rails复杂视图表单与has_many:通过关联

时间:2011-12-15 22:05:42

标签: ruby-on-rails ruby-on-rails-3 views associations has-many-through

我正在尝试为配方创建rails应用程序,但我对如何创建视图表单和控制器逻辑感到困惑。我有两个模型,配方和项目,加入了has_many :through与一个成分模型的关联,如下所示:

class Recipe < ActiveRecord::Base
    has_many :ingredients
    has_many :items, :through => :ingredients
end

class Item < ActiveRecord::Base
    has_many :ingredients
    has_many :recipes, :through => :ingredients
end

class Ingredient < ActiveRecord::Base
    # Has extra attribute :quantity
    belongs_to :recipe
    belongs_to :item
end

此关联在控制台中有效。例如:

Recipe.create( :name => 'Quick Salmon' )
Item.create( :name => 'salmon', :unit => 'cups' )
Ingredient.create( :recipe_id => 1, :item_id => 1, :quantity => 3)

Recipe.first.ingredients
=> [#<Ingredient id: 1, recipe_id: 1, item_id: 1, quantity: 3]

Recipe.first.items
=> [#<Item id: 1, name: "salmon", unit: "cups"]

但是,我不明白如何创建新的配方视图,以便我可以在一个页面中将配料直接添加到配方中。我需要使用fields_for还是嵌套属性?如何在一个页面中构建视图表单和控制器逻辑以创建配方?

我在Rails 3.1.3上。

1 个答案:

答案 0 :(得分:10)

您正在寻找accepts_nested_attributes_for - 方法。 Ryan Bates在其上做了很好的Railscast

您还应该查看documentation for Active Record Nested Attributes