如何编写这个 many_to_many ActiveRecord 查询?
Posted
技术标签:
【中文标题】如何编写这个 many_to_many ActiveRecord 查询?【英文标题】:How do I write this many_to_many ActiveRecord query? 【发布时间】:2021-10-21 01:22:04 【问题描述】:在这个例子中,我想要所有具有Ruby
和html
languages
的projects
,它们是通过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' ))
【问题讨论】:
【参考方案1】:您的解决方案似乎不错。但这里有一个替代
Language.find_by(name: 'Ruby')&.projects & Language.find_by(name: 'HTML')&.projects
如果你在一个变量中有你想要的语言。这可能是一个更简单的解决方案。
【讨论】:
谢谢!我没想过要那样做。Language.where(name: ['Ruby', 'HTML]).map(&:projects).inject(:&)
。刚刚发现了一个更简单、更酷的外观。这给出了相同的结果。
哈哈“酷”加分。再次感谢!以上是关于如何编写这个 many_to_many ActiveRecord 查询?的主要内容,如果未能解决你的问题,请参考以下文章
Elixir ecto 2 创建 many_to_many 关联