更新/编辑以澄清:
我在我的博客AR对象中定义了以下内容
scope :with_tag_tokens, lambda {|name_tokens|
joins(:tags).where(:tags => {:name_token => name_tokens}) unless name_tokens.empty?
}然而,下面的查询将返回标签"name_token“属性等于1、3或5的所有博客(当然,如果我传入1、3、5)……我想知道是否有一种方法可以构造一个类似的查询,只返回只与"name_tokens“为1、3和5的标签相关联的博客。
换句话说..。我只想返回博客A,如果它与标签1、标签3和标签4相关联。
谢谢-wg
发布于 2011-06-21 12:03:25
不管这是不是一种有效的处理方式...它起作用了
tags = ['rails', 'ruby']
BlogEntry.joins(:tags).where(:tags => {:name_token => tags}).group(BlogEntry.column_names.map {|c| BlogEntry.table_name + "." + c }.join(',')).having("count(#{BlogEntry.table_name + '.id'}) =#{tags.count}")你会怎么想?有没有更好的方法?也许直接使用sql是这里的正确方法……如果是这样,我绝对有兴趣听到别人的反馈,不管是好的还是坏的。
下面是* UPDATE *的外观,以防人们感兴趣:
SELECT \"blog_entries\".*
FROM \"blog_entries\"
INNER JOIN \"blog_entries_tags\" ON \"blog_entries_tags\".\"blog_entry_id\" = \"blog_entries\".\"id\"
INNER JOIN \"tags\" ON \"tags\".\"id\" = \"blog_entries_tags\".\"tag_id\"
WHERE \"tags\".\"name_token\" IN ('grace', 'gratitude')
GROUP BY id
HAVING count(blog_entries.id) =2
ORDER BY published_at DESC, title, created_at DESC谢谢
https://stackoverflow.com/questions/6418907
复制相似问题