Rails:非id外键查找ActiveRecord

Gar*_*eld 24 activerecord ruby-on-rails foreign-key-relationship has-many belongs-to

我想ActiveRecord通过表中的非id列进行查找.当我向你提供我的代码示例时,希望这很清楚.

class CoachClass < ActiveRecord::Base
  belongs_to :coach
end

class Coach < ActiveRecord::Base
    has_many :coach_classes, :foreign_key => 'user_name'
end
Run Code Online (Sandbox Code Playgroud)

当我这样做时 coach_obj.coach_classes,这正确地触发了

SELECT * FROM `coach_classes` WHERE (`coach_classes`.user_name = 2)
Run Code Online (Sandbox Code Playgroud)

(2是教练在id这里,这是我的问题.)

我想让它触发

SELECT * FROM `coach_classes` WHERE (`coach_classes`.user_name = 'David')
Run Code Online (Sandbox Code Playgroud)

('大卫'是那个教练的user_name)

user_name 是唯一的,并存在于两个表中.

出于某种原因coach_id,我不想在我的coach_classes桌子上.

Joh*_*ley 53

我认为您还需要在关联上指定主键选项:

class CoachClass < ActiveRecord::Base 
  belongs_to :coach, :foreign_key => 'user_name', :primary_key => 'user_name'
end

class Coach < ActiveRecord::Base
  has_many :coach_classes, :foreign_key => 'user_name', :primary_key => 'user_name'
end 
Run Code Online (Sandbox Code Playgroud)

这指定了返回关联对象的主键的方法(默认为id).


Mar*_*rth 10

有一个名为primary_key默认设置为的选项:id.你想用:

has_many :coach_classes, :foreign_key => :user_name, :primary_key => :user_name
Run Code Online (Sandbox Code Playgroud)

也可以在belongs_to关联上使用这些选项.

阅读文档中的更多内容.