【问题标题】:Lost with Rails has_many: through multiple searchLost with Rails has_many:通过多次搜索
【发布时间】:2014-01-26 03:34:01
【问题描述】:

好吧,我觉得我在兜圈子。

我有以下 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') 总是提供一个空集,即使有多个图像被标记为两者。

非常感谢任何帮助!

【问题讨论】:

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


    【解决方案1】:

    试试in:

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

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

    【讨论】:

    • 不确定,但如果你使用 .collect(&:name) 代替 map,t 也可以是 activerecord 关系,对吧?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    相关资源
    最近更新 更多