假设我有一个模型A与模型B有一对一的关联。模型B设置为'acts_as_taggable'。我想返回一个活动记录关系,它选择所有A实例的B属性被标记为具有某个字符串。它看起来像: A.where('b.tagged_with =?','some_tag')
我发现了this问题,但我有兴趣获得积极的记录关系,所以只有第二个解决方案适用,我无法让它工作。如何恢复活动记录关系,以便我可以调用其他查询参数方法,即。 A.b_tagged_with('tag')。where(...)其中b_tagged_with是命名范围
答案 0 :(得分:0)
回答我自己的问题,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'arace_as_taggable',A doesn'吨。 这允许我这样做:
a = A.new
b = B.new
b.tag_list = ['tag1', 'tag2', 'tag3']
a.b = b
new_a = A.tagged_with('tag1').ordered(...
#At this point new_a.last == a