2010-10-28 19 views
1

快速問題(我認爲)。我有用戶,我想讓他們互相發送消息。我的問題是,如果我有一個用戶表,一個消息表和一個用戶到消息連接表,或者我應該只在消息表中存儲to_user_id和from_user_id。如果是後者,那麼協會會是什麼樣子?你甚至可以引用一個關聯的「本地」鍵嗎?rails用戶到用戶消息,我需要一個連接表嗎?

回答

2

你可以通過幾個簡單的has_many關聯來實現。由於它是自引用的,因此您需要重寫一些Rails魔術才能使其工作。

class User < ActiveRecord::Base 
    has_many :sent_messages, :class_name => 'Message', :foreign_key => 'sender_id' 
    has_many :received_messages, :class_name => 'Message', :foreign_key => 'recipient_id' 
end 

class Message < ActiveRecord::Base 
    belongs_to :sender, :class_name => 'User' 
    belongs_to :recipient, :class_name => 'User' 
end 

Rails沒有一個更乾淨的方式來做我知道的自我指涉關聯。

+0

這確實工作正常,謝謝你,我將實施它。我仍然好奇這是否是最好的方法呢? – re5et 2010-10-28 01:31:02

+0

另外,如果有不同於你想在Message中引用的sender_id和recipient_id的關鍵字,是否有一些奇特的方法來定義「本地」鍵? – re5et 2010-10-28 01:44:44

+0

@ re5et是的,那將是':primary_key' – 2010-10-28 03:03:45

0

我認爲後者聽起來很好。這只是我的頭頂,但我知道AR的協會有這樣的選擇...

class Message < ActiveRecord::Base 
    belongs_to :sender, :class_name => :user, :foreign_key => :from_user_id 
    belongs_to :recipient, :class_name => :user, :foreign_key => :to_user_id 
    #... 
end 

class User < ActiveRecord::Base 
    has_many :received_messages, :class_name => :message, :foreign_key => :to_user_id 
    has_many :sent_messages, :class_name => :message, :foreign_key => :from_user_id 
end 
+0

這裏的Message中的belongs_to關聯不起作用,對吧?這些鍵不是外來的,但是對於消息來說是本地的。 – re5et 2010-10-28 01:28:40

相關問題