我有一张名为食谱的表和另一种名为成分的表。配料可以连接到食物或食谱(一个食谱可以包含其他食谱)。我用它的食物部分实现了它,但我不确定如何实现它的配方部分。我创建了另一个名为recipe_as_ingredients的食物部分的表格,当食谱被选为当前食谱中的食谱时,我将会填充这些食谱。我可能必须在每次保存之前更新表,并在删除配方时手动删除行。是否有更好的实施方式?
以下是模型:
class Recipe < ActiveRecord::Base
has_many :ingredients
end
class Ingredient < ActiveRecord::Base
belongs_to :element, :polymorphic => true
belongs_to :recipe
end
class Food < ActiveRecord::Base
has_many :ingredients, :as => :element
end
class RecipeAsIngredient < ActiveRecord::Base
has_many :ingredients, :as => :element
end
我在保存之前手动设置了一个函数中的元素类型,所以我需要将相似的配方作为成分,但要确保recipe_as_ingredient包含连接到该成分的记录:
self.element_id = numid.id
self.element_type = 'Food'
P.S。如果没有recipe_as_ingredients连接表,我无法连接配方,因为它使得记录无法保存,因为配方既是主记录又是详细记录,而且id字段总是为零。
答案 0 :(得分:0)
你真是太近了。
移动: has_many:成分,:as =&gt; :元素
在Recipe模型上。
RecipeAsIngrident应该存在。如果你想获得食谱中使用的所有食物,那么你想要一个Recipe功能来总结后代。这将是一个计算的总数,因此您不需要回调来更新总数等,但是我会添加逻辑以防止删除用于其他内容的配方。
询问您是否需要进一步澄清。