迷失了Rails has_many:通过多次搜索

时间:2014-01-26 03:34:01

标签: mysql sql ruby-on-rails activerecord ruby-on-rails-4

好吧,我觉得我在圈子里跑。

我有以下Rails模型:

class Image < ActiveRecord::Base
  has_many :image_tags
  has_many :tags, :through => :image_tags
end

class Tag < ActiveRecord::Base
  has_many :image_tags
  has_many :images, :through => :image_tags
end

class ImageTag < ActiveRecord::Base
  belongs_to :image
  belongs_to :tag
end

所以基本上我有图像,我有标签,图像可以有各种各样的标签。

如果我想找到每个有一个标签的图片,那很简单,对吧?

def Image.find_by_tag(t)
  includes('tags').where(['tags.name = ?', t]).references(:tags)
end

但我正在试图弄清楚如何同时搜索多个标签(即,找到所有图像,例如,都标记为“有趣”和“政治”)。

Image.find_by_tag('funny').find_by_tag('political')总是会出现一个空集,即使有多个图像被标记为两者。

任何帮助都非常感谢!

1 个答案:

答案 0 :(得分:0)

尝试in

def self.by_tags(t)
  includes('tags').where('tags.name in(?)', t.map(&:name)).references(:tags)
end

请注意,参数t必须是包含响应name属性的对象的数组。