如何在 ActiveRecord 中关联两个加入模型?

Posted

技术标签:

【中文标题】如何在 ActiveRecord 中关联两个加入模型?【英文标题】:How to associate two joining models in ActiveRecord? 【发布时间】:2017-06-08 16:21:07 【问题描述】:

假设我们有 2 个 AR 模型:

class User < ApplicationRecord
  has_many :proposals
  has_many :concerns
end

class Job < ApplicationRecord
  has_many :proposals
  has_many :concerns
end

Proposal 和 Concern 都是 User 和 Job 之间的连接模型:

class Proposal < ApplicationRecord
  belongs_to :user
  belongs_to :job
end

class Concern < ApplicationRecord
  belongs_to :user
  belongs_to :job
end

我要解决的是如何通过用户和工作来关联提案和关注点。 IE。我想使用急切加载等:

proposals.preload(:concerns).map do |proposal|
  # proposal.concerns are preloaded here 
  # and all concerns have same user and job
end

我当前的解决方案只是简单的concerns 方法,它查找关注点 - 它无效,因为执行 N + 1 个查询。

我想避免向其中一个加入模型添加多余的外键。

【问题讨论】:

【参考方案1】:

这应该避免 N+1 个查询

Proposal.includes(user: :concerns).where(condition: 123)

【讨论】:

不,这些关注点将包括与所有工作相关的所有用户关注点。 那么您可以尝试在jobs上添加条件 你到底想要什么

以上是关于如何在 ActiveRecord 中关联两个加入模型?的主要内容,如果未能解决你的问题,请参考以下文章

获取Rails模型中关联列的总和

如何在 Python 中关联两个音频事件(检测它们是不是相似)

通过rails中关联模型的子类查询

如何在phpmyadmin中关联同一张表的两个字段?

如何覆盖 Grails GORM 中关系的级联删除?

在 sequelize 中关联两个表