首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >洗劫者匹配所有的协会

洗劫者匹配所有的协会
EN

Stack Overflow用户
提问于 2017-01-15 10:25:38
回答 1查看 674关注 0票数 1

我有User模型,has_many技能。我需要让用户匹配所有选定的技能。例如:

代码语言:javascript
运行
复制
User A: Ruby, HTML, JavaScript. 
User B: Ruby
User C: Ruby, C++

当我使用技能名称或ids列表进行搜索时。我需要get用户在这个列表中拥有所有的值。所以,使用Ruby & Javascript搜索,我需要得到User A

如果我使用洗劫宝石 skills_id_in,它将返回所有具有Ruby技能的用户。查询如下:

代码语言:javascript
运行
复制
SELECT \"users\".* FROM \"users\" LEFT OUTER JOIN \"user_skills\" ON \"user_skills\".\"user_id\" = \"users\".\"id\" LEFT OUTER JOIN \"skills\" ON \"skills\".\"id\" = \"user_skills\".\"skill_id\" WHERE \"skills\".\"id\" IN (1, 3)

如果在洗劫中不允许的话。您能帮助如何在ActiveRecord中实现&在DB级别中运行吗?

我的观点:它不能实现使用洗劫机,如果您知道本地查询匹配所有关联,让我知道?

EN

回答 1

Stack Overflow用户

发布于 2017-01-16 00:45:36

我似乎无法找到一种直接通过Postgres查询a包含的方法,但下面的方法会奏效:

代码语言:javascript
运行
复制
result = User.joins(:skills)

skills_names = ['Ruby', 'JavaScript']
skills_names.each do |skill_name|
  result = result.where('? = ANY(name)', skill_name)
end

如果您知道您将提前查询多少技能,则可以将它们合并到一个查询中:

代码语言:javascript
运行
复制
User.joins(:skills).where('? = ANY(name) AND ? = ANY(name)', 'Ruby', 'JavaScript')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41660079

复制
相关文章

相似问题

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