【问题标题】:Rails 4 has_many association several primary key idsRails 4 has_many关联几个主键id
【发布时间】:2014-12-08 13:04:58
【问题描述】:

我希望能够通过查看主键上的多个 id 来将模型加入关系表。
这就是我正在尝试的方式。我有一个 has_many through 关联,如下所述:

class Pro < ActiveRecord::Base
  has_many :client_relationships, lambda { |pro| where(pro_id: [pro.id] + pro.authorized_pros) }
  has_many :clients, through: :client_relationships
end

ClientRelationship 是一个没有默认范围的基本关系表,Client 与 Pro 是同一个类,只是方式相反。

我正在尝试对has_many :clients 生成的方法应用范围。问题是,当我执行pro.clients 时,我得到以下查询(给定pro.id = 1 和pro.authorized_pros = [2, 3])

SELECT `clients`.* FROM `clients` INNER JOIN `client_relationships` ON `clients`.`id` = `client_relationships`.`client_id` WHERE `client_relationships`.`pro_id` = 1 AND `client_relationships`.`pro_id` IN (1, 2, 3)

我们可以看到SQL的最后一部分(从AND开始)是由Rails生成的。

有没有办法禁用这种行为?或者也许是另一种解决方案?

编辑:我需要 Pro 模型上的两个 has_many 关系,因为我使用它生成的方法 EDIT 2:将范围移至关系 has_many :client_relationships

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 associations primary-key composite-primary-key


    【解决方案1】:

    我不知道为什么关系依赖于两个规则,但是你可以尝试部分来生成查询:

    ClientRelationship.arel_table[:pro_id].in(pro.authorized_pros | [ pro.id ])
    

    【讨论】:

    • 我需要能够透明地使用pro.clients。此arel 查询与范围内的where 查询相同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 2011-07-14
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多