【问题标题】:How do I write this many_to_many ActiveRecord query?如何编写这个 many_to_many ActiveRecord 查询?
【发布时间】:2021-10-21 01:22:04
【问题描述】:

在这个例子中,我想要所有具有RubyHTML languagesprojects,它们是通过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' }))

【问题讨论】:

    标签: sql ruby-on-rails postgresql rails-activerecord


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢!我没想过要那样做。
    • Language.where(name: ['Ruby', 'HTML]).map(&:projects).inject(:&) 。刚刚发现了一个更简单、更酷的外观。这给出了相同的结果。
    • 哈哈“酷”加分。再次感谢!
    猜你喜欢
    • 2017-08-04
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多