Rails сложная форма представления с has_many: через ассоциацию - PullRequest
4 голосов
/ 16 декабря 2011

Я пытаюсь создать приложение rails для рецептов, но не совсем понимаю, как создавать формы представления и логику контроллера.У меня есть 2 модели, Рецепт и Предмет, объединенные в 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 Ответ

10 голосов
/ 16 декабря 2011

Метод accepts_nested_attributes_for - это то, что вы ищете.Райан Бейтс сделал превосходный Railscast для него.

Вам также следует проверить документацию для вложенных атрибутов Active Record

...