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关联上使用这些选项.