2011-05-23 46 views
14

我想在RoR應用程序中自我識別模型,但我不知道具體如何。我想保存一個鏈接列表,其中下一個節點具有前一個節點的標識。我怎樣才能做到這一點的方式?這是一對一的關係。我如何在rails上做ruby自引用?

+0

我想你開始通過搜索StackOverflow「[ruby-on-rails]自我參照關聯」:http://stackoverflow.com/search?q=%5Bruby-on-rails%5D%20self%20referential%20association - 重複? :-) – conny 2011-05-23 12:49:11

+0

實際上我搜查了這個,但他們沒有解決我的問題。 – JRafaelM 2011-05-23 17:51:03

回答

51

最簡單的方法:

class MyModel < ActiveRecord::Base 
    belongs_to :parent, :class_name => 'MyModel' 
    has_many :children, :class_name => 'MyModel', :foreign_key => 'parent_id' 
end 
+0

我正在使用rails 3,我只需要一個參考不是很多,has_one的作品?如果是,我做錯了什麼。 – JRafaelM 2011-05-23 17:52:20

2

我花了一些時間,試圖使其工作使用Rails 3.2.14

的文檔對self-joining associations建議並沒有爲belongs_to協會合作。添加外鍵解決了問題。

Class User < ActiveRecord::Base 
    has_many :invitees, class_name: 'User', foreign_key: :invited_by 
    belongs_to :host, class_name: 'User', foreign_key: :invited_by 
end 
0

另請參閱本教程由瑞安貝茨在自我參考協會here。 Hck的答案將工作,但對我來說,我需要一個JOIN表,所以我通過Rails的關聯使用has_many。祝你好運!