私は料理のレシピを保存するサービスを作成しており、各材料のオプションの優先ブランドを使用して材料のリストを作成しようとしています。たとえば、パスタのレシピは皮をむいたトマトを使用しており、好ましいブランドはCentoです。私の材料は階層カテゴリツリーに保存されているため、優先される材料はそのツリーの材料の子です。
これが私の単純化されたデータベース設定です:
recipes
- name
- instructions
ingredients
- name
recipe_ingredients
- recipe_id
- ingredient_id
- preferred_ingredient_id
- amount
そして協会:
class Recipe < ActiveRecord::Base
has_many :recipe_ingredients
has_many :ingredients, :through => :recipe_ingredients
has_many :preferred_ingredients, :through => :recipe_ingredients
end
class Ingredient < ActiveRecord::Base
end
class RecipeIngredient < ActiveRecord::Base
belongs_to :recipe
has_one :ingredient
has_one :preferred_ingredient
end
Preferred_ingredient_idとcomponent_idの両方が同じモデルを指していること、および:preferred_ingredientsが実際にはシンボルとして存在しないことを処理する方法がわかりません。アソシエーションを別の方法で設定する必要がありますか?