【问题标题】:Conditions on has_many throughhas_man 通过条件
【发布时间】:2014-12-10 14:57:17
【问题描述】:

我有三门课 TeamMemberServiceServiceTeamMember

我有

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

现在,在我网站的某个区域,我想急切加载部门,其中部门是顶级服务,我使用的是祖先,所以你只需要知道部门是 ancestry 的服务@ 987654326@

所以我需要一个实际的关联,这样我就可以急切地加载它而不是一个范围。

我试过这样添加

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

但我收到以下错误

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)

所以 rails 将我的条件应用于连接表而不是我想要的表。我该如何解决这个问题,我认为这是一个简单的解决方案,但我遗漏了一些明显的东西。

【问题讨论】:

    标签: mysql sql ruby-on-rails-4


    【解决方案1】:

    只需将source: :service 更改为source: :team_member

    【讨论】:

    • 我认为 source 用于显示如果 rails 无法从关联名称中获取它,那么您想要获取什么,例如我将其称为 departments 但我实际上是什么想要的是Service
    猜你喜欢
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多