简体   繁体   English

has_many的条件

[英]Conditions on has_many through

I have three classes TeamMember , Service and ServiceTeamMember 我有三个类TeamMemberServiceServiceTeamMember

I have 我有

class Service
  has_many :service_team_members
  has_many :team_members, through: :service_team_members
end

class ServiceTeamMember
  belongs_to :service
  belongs_to :team_member
end

class TeamMember
  has_many :service_team_members
  has_many :services, through: :service_team_members
end

Now in a certain area of my site I want to eager load departments, where a department is a top level service, I'm using ancestry so all you need to know is a department is a service with ancestry of NULL 现在在我网站的某个区域中,我希望加载部门,部门是顶级服务,我正在使用ancestry,所以您只需要知道一个部门是ancestryNULL的服务即可。

So I need an actual association so I can eager load it rather than a scope. 因此,我需要一个实际的关联,以便可以急于加载它而不是作用域。

I've tried adding it as such 我试过这样添加它

has_many :departments, -> { where(ancestry: nil) }, through: :service_team_members, source: :service

But I get the following error 但我收到以下错误

Mysql2::Error: Unknown column 'services.ancestry' in 'where clause': SELECT `service_team_members`.* FROM `service_team_members`  WHERE `services`.`ancestry` IS NULL AND `service_team_members`.`team_member_id` IN (28, 32)

So rails is applying my condition to the join table rather than the table I want. 因此,Rails会将我的条件应用于联接表,而不是我想要的表。 How can I get around this, I assume it's a simple solution and I'm missing something obvious. 我如何解决这个问题,我认为这是一个简单的解决方案,但我缺少明显的东西。

只需更改source: :service通过source: :team_member

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM