Rails:act-as-taggable-on:在关系上使用tagged_with

假设我有一个模型A,它与模型B有一对一的关联。模型B设置为’acts_as_taggable’。 我想返回一个活动记录关系,它选择所有A实例的B属性被标记为具有某个字符串。 它看起来像:A.where(’b.tagged_with =?’,’some_tag’)

我发现了这个问题,但我有兴趣获得一个积极的记录关系,所以只有第二个解决方案是适用的,我无法让它工作。 如何恢复活动记录关系,以便我可以调用其他查询参数方法,即。 A.b_tagged_with(’tag’)。where(…)其中b_tagged_with是命名范围

回答我自己的问题,我在A中的范围定义如下:

scope :tagged_with, lambda { |tag| { :joins => "INNER JOIN taggings ON taggings.taggable_id = as.b_id\ INNER JOIN tags ON tags.id = taggings.tag_id AND taggings.taggable_type = 'B'", :conditions => ["tags.name = ?", tag] } } 

这就是返回所有A模型,其b成员与标记相关联,如果标记’标记关联的’name’值等于我们传入的参数。在这个例子中B’ampact_as_taggable’,A没有。 这允许我这样做:

 a = A.new b = B.new b.tag_list = ['tag1', 'tag2', 'tag3'] ab = b new_a = A.tagged_with('tag1').ordered(... #At this point new_a.last == a