在Ruby on Rails中,如何创建一个表/模型,其中包含一个引用同一个表的字段?

时间:2011-01-25 15:41:40

标签: ruby-on-rails

我试图在Rails 3中这样做。我创建了一个表(代码示例上的语法可能不完全正确,我试图从内存中重新创建):

create_table "persons", :force => true do |t|
    t.string "name"
    t.integer "guest_of_id"
end

我希望guest_id引用人员表中的另一行。每个人只有一个人的客人。所以在模型中我建立了关联:

class Person < ActiveRecord::Base
    belongs_to :GuestOf, :class => "Person", :foreign_key => "guest_of_id"
end

但是,当我尝试引用guestOf字段时

a_person.GuestOf.name

我收到错误

undefined method 'eq' for nil:NilClass

这在Rails中可行吗?难道我做错了什么?我错过了has_many关系吗?我强烈怀疑我的Google-Fu让我失望了。我找到的唯一可能的解决方案是http://railscasts.com/episodes/163-self-referential-association,但他正在建立多对多的关系,我认为它比我想做的更复杂。

感谢。

1 个答案:

答案 0 :(得分:2)

你真的应该能够做到:

class Person < ActiveRecord::Base
    belongs_to :host, :class => "Person", :foreign_key => "guest_of_id"
    has_one :guest, :class => "Person", :foreign_key => "guest_of_id"
end