开发者

Ruby: has_one relationship with foreign key?

I have a model called "EmployeeRecord" and it has a field called username, There is another model called "Employee" with a field called username.

I want to create an association between the 2 models so when I do:

record = EmployeeRecord.find(1)
record.employee // returns Employee instance

I was thinking I'd just need to do this, but apparently it doesn't work:

class EmployeeRecord < ActiveRecord::Base
    has_one :employee, :foreign_key: username
end

Assume I can't add an employee_id开发者_如何学编程 field to EmployeeRecord. I scoured the Rails tutorials.. and recall wanting to know how to do this months ago.. but those dang Rails tutorials glided over this.. I remember.. it made me very very angry hehe

Any idea?


You'll also need to specify the primary_key used for the association, or else it's defaulted to "id". Your statement actually says "Search for a field username in table employee that is equal to my id field". What you actually want is "Search for a field username in table employee that is equal to my username field"

This should do the trick :

class EmployeeRecord < ActiveRecord::Base
    has_one :employee, :foreign_key => username, :primary_key => :username
end

But hey... Why don't you use ids?


Add the foreign key option in the belongs_to method in your Employee model.

class Employee < ActiveRecord::Base
  belongs_to :employee_record, foreign_key: username
end

The has_one or has_many is the parent, so it doesn't store the foreign key value/column. That's what the child does that has the belong_to side of the relationship.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜