【发布时间】: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