Rails 充当可标记对象,获取所有具有特定标记的相关对象

Rails acts as taggable on, get all related objects that have a certain tag

我在 FooBar 之间有一个 n 对 n 关系,并且 Bar 是一个可标记对象。

class Foo < ActiveRecord::Base
  has_many :xx
  has_many :bars, through: :xx
end

class Bar < ActiveRecord::Base
  has_many :xx
  has_many :foos, through: :xx
  acts_as_taggable
end

我正在使用 acts as taggable on gem;我想知道是否有一种方法可以使用 tagged_with 获取所有 Foo 对象,这些对象的 Bar 对象被标记为特定标签?

示例:

Foo.with_bar_tagged_with("input_search_tag")
#=> #<ActiveRecord::Relation [#<Foo>,...]

这超出了我的想象,但我希望是这样的。

def Foo.with_bar_tagged_with(tag)
  Bar.tagged_with(tag).collect{|x|x.bars}.flatten.uniq
end

最后使用以下方法解决了:

Foo.joins(:bars).where("bars.id IN ?",Bar.tagged_with("input_search_tag")).uniq