首页 > 解决方案 > 如何编写这个 many_to_many ActiveRecord 查询?

问题描述

在这个例子中,我想要所有projects具有RubyANDHTML 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' }))

标签: sqlruby-on-railspostgresqlrails-activerecord

解决方案


您的解决方案似乎不错。但这里有一个替代品

Language.find_by(name: 'Ruby')&.projects & Language.find_by(name: 'HTML')&.projects

如果你在变量中有你想要的语言。这可以是一个更简单的解决方案。


推荐阅读