2011-05-12 56 views
0

比方說,我有2個表:Rails的協會同型號

Users 
user_id name 

Tags 
tagger_id tagged_id 

這說明一個情況下,你可以

而且,我試圖建立的模型是:

class User < ActiveRecord::Base 
    has_many :tags, :foreign_key => "tagger_id" 
end 

class Tag < ActiveRecord::Base 
    belongs_to :tagger, :class => "User" 
    belongs_to :tagged, :class => "User" 
end 

我試圖將其設置,這樣,當我做的:

user.tags 

它返回用戶對象列表。用我目前的設置,它只是帶有ID而不是物體的實際標記記錄。我如何設置它,以便返回用戶對象列表?

我試着使用:

has_many :tags, :foreign_key => "tagger_id", :source => :tagged 

但沒有奏效。

+0

'user.tags'應該給你標籤,而不是用戶...你告訴它「給我這個用​​戶的所有標籤」。你能澄清一下你期望的確切用戶列表嗎? – 2011-05-12 15:57:53

回答

0

您正在尋找has_many:through。

class User < ActiveRecord::Base 
    has_many :tags, :foreign_key => "tagger_id" 
    has_many :tagged, :through => :tags 
end 

然後應該給你你想要的用戶列表。

+0

謝謝!那很簡單。有什麼辦法可以回收「標籤」名稱,所以我可以使用user.tags而不是user.tagged它嗎?有一個更好的戒指:) – Paul 2011-05-12 16:12:46

+0

有什麼意義?它只是造成混亂,沒有任何好處。 – 2011-05-12 16:52:07

+0

我同意最大 - 標籤是標籤,而不是用戶。如果你願意,你可以定義一個「標籤」方法,但我真的不明白這一點。 – Thilo 2011-05-12 18:30:23