Ruby:has_one与外键的关系?

时间:2011-09-09 00:13:26

标签: ruby-on-rails

我有一个名为“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教程滑过这个..我记得..它让我非常生气嘿嘿

有什么想法吗?

2 个答案:

答案 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是父级,因此它不存储外键值/列。这就是孩子所拥有的关系中属于这一方面的东西。