Rails 充当可标记对象,获取所有具有特定标记的相关对象
Rails acts as taggable on, get all related objects that have a certain tag
我在 Foo
和 Bar
之间有一个 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
我在 Foo
和 Bar
之间有一个 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