首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Ruby和ActiveRecord构造一个独占IN查询?

如何使用Ruby和ActiveRecord构造一个独占IN查询?
EN

Stack Overflow用户
提问于 2011-06-21 08:00:25
回答 1查看 76关注 0票数 2

更新/编辑以澄清:

我在我的博客AR对象中定义了以下内容

代码语言:javascript
运行
复制
  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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-21 12:03:25

不管这是不是一种有效的处理方式...它起作用了

代码语言:javascript
运行
复制
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 *的外观,以防人们感兴趣:

代码语言:javascript
运行
复制
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

谢谢

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6418907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档