Я следовал руководству и создал метод маркировки на своем веб-сайте с рецептами. У меня есть следующие модели:
class Recipe < ActiveRecord::Base
has_many :taggings
has_many :tags, through: :taggings
end
class Tag < ActiveRecord::Base
has_many :taggings
has_many :recipes, through: :taggings
end
class Tagging < ActiveRecord::Base
belongs_to :tag
belongs_to :recipe
end
В своем указателе рецептов я хотел бы создать фильтр, который выбирает рецепты с тегами ALL, выбранными пользователем.
У меня есть способ вытащить все рецепты с заданным тегом:
def self.tagged_with(name)
Tag.find_by_name!(name).recipes
end
... и я пытаюсь использовать inject
для объединения нескольких тегов в один запрос:
def self.new_filter(tags) # tags is an array
tags.inject(Recipe.all) { |res, arg| res.tagged_with(arg) }
end
Но это не возвращает рецепты со всеми тегами, он возвращает рецепты с последним тегом в массиве тегов. Как это исправить, чтобы возвращались только рецепты со всеми тегами?