我有一个食谱应用程序,其中每个食谱与许多成分相关联,并使用ancestry宝石组织成分。
class Ingredient < AR::Base
has_ancestry
has_many :recipe_ingredients
has_many :recipes, through: :recipe_ingredients
end
class Recipe < AR::Base
has_many :recipe_ingredients
has_many :ingredients, through: :recipe_ingredients
end
所以,例如,&#34;酱油&#34;将是一种成分和&#34; kikkoman&#34;将是&#34;酱油&#34;的孩子。食谱可能需要&#34;酱油&#34;或者特别要求&#34; kikkoman&#34;按名称。
我希望能够通过祖先搜索食谱,所以如果我搜索&#34;酱油&#34;它还可以找到孩子的食谱&#34; kikkoman&#34;。我怎样才能用Rails魔术来实现这个目标?
答案 0 :(得分:1)
如果ingredient_key
是给定的成分(酱油),这可以为您提供所有食谱:
(ingredient_key.ancestors + ingredient_key + ingredient_key.descendants).map(&:recipes).flatten.uniq
。
如果你只想要那种成分及其子代的食谱,你可以省略祖先。