Я следил за учебником и создал метод тегов на моем сайте рецептов. У меня есть следующие модели:Rails 4: Фильтр с тегами
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
В моем индексе рецепта я хотел бы создать фильтр, который выбирает для рецептов, которые имеют ВСЕХ тегов, выбранных пользователь.
У меня есть метод вытягивать все рецепты с данным тегом:
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
Но это не возвращает рецепты со всеми тегами, оно возвращает рецепты с последним тегом в массиве тегов. Как исправить это, чтобы возвращать только рецепты со всеми тегами?
Это довольно похожий вопрос на http://stackoverflow.com/questions/17920505/match-all-in-active-record-relations-in-a-query, у которого есть ответ, который может по крайней мере дать вам указание в в правильном направлении. – Jim