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

时间:2015-05-14 10:06:46

标签: ruby-on-rails ruby-on-rails-4 tags acts-as-taggable-on

我在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宝石;我想知道是否有办法使用tagged_with 获取所有标有某个标记的Bar对象的Foo对象?

示例:

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

2 个答案:

答案 0 :(得分:1)

这不是我的首要任务,但我希望能有类似的东西。

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

答案 1 :(得分:0)

最后使用以下方法解决:

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