0

我有一张叫做食谱的桌子和一张叫做配料的桌子。成分可以连接到食物或食谱(一个食谱可以包含其他食谱)。我已经用它的食物部分实现了它,但我不确定如何实现它的食谱部分。我创建了另一个表,称为它的食物部分,称为 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 字段始终为零。

4

1 回答 1

0

你是如此接近。

移动:has_many :ingredients, :as => :element

进入配方模型。

RecipeAsIngrident 应该存在。如果你想获取食谱中使用的所有食物,那么你需要一个食谱上的函数来总结后代。这将是一个计算的总数,因此您不需要回调来更新总数等,但是我会添加逻辑以防止删除用于其他用途的配方。

询问您是否需要更多说明。

于 2012-08-26T22:30:03.723 回答