Рецепты и ингредиенты имеют отношение и принадлежат многим, но вы хотите хранить дополнительную информацию для ссылки.
По сути, вы ищете богатую модель соединения. Но отношение has_and_belongs_to_many недостаточно гибкое, чтобы хранить необходимую вам дополнительную информацию. Вместо этого вам нужно будет использовать has_many: through relatinship.
Вот как бы я это настроил.
рецепты колонок: инструкция
class Recipe < ActiveRecord::Base
has_many :recipe_ingredients
has_many :ingredients, :through => :recipe_ingredients
end
столбцы recipe_ingredients: recipe_id, ингридиент_id, количество
class RecipeIngredients < ActiveRecord::Base
belongs_to :recipe
belongs_to :ingredient
end
столбцы ингредиентов: имя
class Ingredient < ActiveRecord::Base
has_many :recipe_ingredients
has_many :recipes, :through => :recipe_ingredients
end
Это обеспечит базовое представление о том, что вы хотите сделать. Возможно, вы захотите добавить проверку RecipeIngredients, чтобы гарантировать, что каждый ингредиент указан один раз для каждого рецепта, и обратный вызов, чтобы сложить дубликаты в одну запись.