Rails血统协会

时间:2014-10-30 17:16:55

标签: ruby-on-rails ancestry

我有一个食谱应用程序,其中每个食谱与许多成分相关联,并使用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魔术来实现这个目标?

1 个答案:

答案 0 :(得分:1)

如果ingredient_key是给定的成分(酱油),这可以为您提供所有食谱:

(ingredient_key.ancestors + ingredient_key + ingredient_key.descendants).map(&:recipes).flatten.uniq

如果你只想要那种成分及其子代的食谱,你可以省略祖先。