Rails:非id外键查找ActiveRecord
我希望ActiveRecord
通过表中的非id列进行查找。 当我向你提供我的代码示例时,希望这很清楚。
class CoachClass < ActiveRecord::Base belongs_to :coach end class Coach 'user_name' end
当我做一个coach_obj.coach_classes
,这正确地触发了
SELECT * FROM `coach_classes` WHERE (`coach_classes`.user_name = 2)
(2是教练的id
,这是我的问题。)
我想让它触发
SELECT * FROM `coach_classes` WHERE (`coach_classes`.user_name = 'David')
(’David’是那个教练的user_name
)
user_name
是唯一的,并且存在于两个表中。
出于某种原因,我不希望在coach_classes
表中有一个coach_id
。
我认为您还需要在关联上指定主键选项:
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
这指定了返回关联对象的主键的方法(默认为id
)。
有一个名为primary_key
的选项,默认情况下设置为:id
。 你想用:
has_many :coach_classes, :foreign_key => :user_name, :primary_key => :user_name
还可以在belongs_to
关联上使用这些选项。
阅读文档中的更多内容 。
你需要使用finder_sql
:
class Coach < ActiveRecord::Base has_many :coach_classes, :finder_sql => 'SELECT * FROM `coach_classes` WHERE (`coach_classes`.user_name = "#{user_name}")' end