如何在ActiveRecord中关联两个连接模型?

时间:2017-06-08 16:21:07

标签: ruby-on-rails associations rails-activerecord

假设我们有2个AR模型:

class User < ApplicationRecord
  has_many :proposals
  has_many :concerns
end

class Job < ApplicationRecord
  has_many :proposals
  has_many :concerns
end

提案和关注点都是加入用户和工作之间的模型:

class Proposal < ApplicationRecord
  belongs_to :user
  belongs_to :job
end

class Concern < ApplicationRecord
  belongs_to :user
  belongs_to :job
end

我想要解决的是如何通过用户和工作来关联提案和问题。即我想用急切的装载等:

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

我目前的解决方案只是简单的concerns方法查找问题 - 因为N + 1查询无效。

我想避免将冗余外键添加到其中一个连接模型中。

1 个答案:

答案 0 :(得分:0)

这应避免N + 1次查询

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