belongs_to不使用主键选项

时间:2009-08-01 16:54:14

标签: ruby-on-rails activerecord

我一直在努力解决这个问题,并决定把它扔出去:

我有3个型号,用户,连接,可疑

用户有很多连接, Connection有一个Suspect,通过case_id链接

用户通过其连接拥有许多嫌疑人。

代码如下:

class User < ActiveRecord::Base
  has_many :followers
  has_many :suspects, :through => :followers
end

class Connection < ActiveRecord::Base
  belongs_to :user
  belongs_to :suspect, :primary_key => :case_id , :foreign_key => :case_id
end

class Suspect < ActiveRecord::Base
  belongs_to :connection, :primary_key => :case_id , :foreign_key => :case_id
end

问题是belongs_to似乎忽略了:主键。

如果我这样做

u = User.find(:first)
u.suspects

生成的SQL是:

SELECT `suspects`.* FROM `suspects` INNER JOIN `connections` ON `suspects`.id = `connections`.case_id WHERE ((`followers`.user_id = 1))

但它应该是:

SELECT `suspects`.* FROM `suspects` INNER JOIN `connections` ON `suspects`.case_id = `connections`.case_id WHERE ((`followers`.user_id = 1))

有人能指出我正确的方向吗?

詹姆斯

2 个答案:

答案 0 :(得分:5)

belongs_to的文档说你可以使用:primary_key选项,但我们也从未能让它工作。那就是最新版本的rails 2.3.3,特别是fix for this

答案 1 :(得分:1)

经过更多的测试,@ pallan是正确的,这在2.3.3中得到修复,但仅限于第一级关联,而不是针对has_many:through。

例如:

Connection.suspects

使用正确的SQL,但

User.connections.suspects

没有。

我现在要开门票。

JP