2011-05-12 110 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