sql - 如何编写这个 many_to_many ActiveRecord 查询?
问题描述
在这个例子中,我想要所有projects
具有Ruby
ANDHTML
languages
的,它们是一个 many_to_many 的关系project_languages
。
class Project
has_many :project_languages
has_many :languages, through: :project_languages
end
class Language
has_many :project_languages
has_many :projects, through: :project_languages
end
class ProjectLanguage
belongs_to :project
belongs_to :language
end
我正在尝试,但返回一个空数组:
Project.joins(:languages).where('languages.name = ? AND languages.name = ?', 'Ruby', 'HTML')
这将返回预期的结果,但我认为必须有一种更简单的方法:
Project.joins(:languages).where(languages: {name: 'Ruby' }) & (Project.joins(:languages).where(languages: {name: 'HTML' }))
解决方案
您的解决方案似乎不错。但这里有一个替代品
Language.find_by(name: 'Ruby')&.projects & Language.find_by(name: 'HTML')&.projects
如果你在变量中有你想要的语言。这可以是一个更简单的解决方案。
推荐阅读
- javascript - $nextTick 直接来自 Javascript 脚本
- tinymce - OnChange 未读取属性
- javascript - 从购物车中删除商品 (JavaScript)
- coq - 什么都不做的战术是什么?
- python - Jenkins python模块 - 将参数传递给run_script()
- python - 带有表描述的标题
- r - 如何从混合字符串中提取数字
- node.js - AWS Lex 在第一次触发意图时发送消息气泡
- bazel - 运行nodejs_image时,`Bazel run`不会在bazel-bin中找到静态文件依赖项
- ios - Swift iOS:带有金属内核的核心映像:奇怪的内核行为