我有一张叫做食谱的桌子和一张叫做配料的桌子。成分可以连接到食物或食谱(一个食谱可以包含其他食谱)。我已经用它的食物部分实现了它,但我不确定如何实现它的食谱部分。我创建了另一个表,称为它的食物部分,称为 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'
ps 如果没有 recipe_as_ingredients 连接表,我无法连接配方,因为它无法保存记录,因为配方既是主记录又是详细记录,并且 id 字段始终为零。