Ассоциация предков Rails

У меня есть приложение с рецептами, в котором каждый рецепт связан с рядом ингредиентов, а ингредиенты организованы с использованием происхождения. драгоценный камень.

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

Так, например, «соевый соус» будет ингредиентом, а «киккоман» будет потомком «соевого соуса». В рецепте может упоминаться «соевый соус» или специально упоминаться «киккоман» по имени.

Я хочу иметь возможность искать рецепты по происхождению, поэтому, если я запущу запрос «соевый соус», он также найдет рецепты с дочерним элементом «kikkoman». Как я могу добиться этого с помощью магии Rails?


person kid_drew    schedule 30.10.2014    source источник


Ответы (1)


если ingredient_key является заданным ингредиентом (соевый соус), это может дать вам все рецепты:

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

Вы можете опустить предков, если вам нужны только рецепты этого ингредиента и его потомков.

person Anand    schedule 30.10.2014
comment
Поскольку мне не нужны предки, я просто использовал ингридиент.поддерево, которое включает в себя как ингридиент, так и его потомков. - person kid_drew; 30.10.2014