Rails 4 has_many关联几个主键id

时间:2014-12-08 13:04:59

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

我希望能够通过查看主键上的几个ID将模型加入到关系表中 这就是我尝试这样做的方式。我有一个has_many通过关联,如下所述:

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关系,因为我使用其生成的方法 编辑2 :将范围移至关系has_many:client_relationships

1 个答案:

答案 0 :(得分:0)

我不知道为什么关系取决于这两个规则,但您可以尝试部分来生成查询:

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