我有一个名为“EmployeeRecord”的模型,它有一个名为username的字段,还有另一个名为“Employee”的模型,其中包含一个名为username的字段。
我想在两个模型之间创建一个关联,所以当我这样做时:
record = EmployeeRecord.find(1)
record.employee // returns Employee instance
我以为我只需要这样做,但显然它不起作用:
class EmployeeRecord < ActiveRecord::Base
has_one :employee, :foreign_key: username
end
假设我无法将employee_id字段添加到EmployeeRecord。我仔细研究了Rails教程..并回忆起想要知道如何在几个月前做这个...但是那些dang Rails教程滑过这个..我记得..它让我非常生气嘿嘿
有什么想法吗?
答案 0 :(得分:7)
您还需要指定用于关联的primary_key,否则默认为“id”。您的陈述实际上是“在表员工中搜索等于我的id字段的字段用户名”。您真正想要的是“在表员工中搜索等于我的用户名字段的字段用户名”
这应该可以解决问题:
class EmployeeRecord < ActiveRecord::Base
has_one :employee, :foreign_key => username, :primary_key => :username
end
但是嘿......你为什么不用ids?
答案 1 :(得分:2)
在Employee模型的belongs_to方法中添加外键选项。
class Employee < ActiveRecord::Base
belongs_to :employee_record, foreign_key: username
end
has_one或has_many是父级,因此它不存储外键值/列。这就是孩子所拥有的关系中属于这一方面的东西。