快速問題(我認爲)。我有用戶,我想讓他們互相發送消息。我的問題是,如果我有一個用戶表,一個消息表和一個用戶到消息連接表,或者我應該只在消息表中存儲to_user_id和from_user_id。如果是後者,那麼協會會是什麼樣子?你甚至可以引用一個關聯的「本地」鍵嗎?rails用戶到用戶消息,我需要一個連接表嗎?
1
A
回答
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
我認爲後者聽起來很好。這只是我的頭頂,但我知道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
相關問題
- 1. Rails中用戶到用戶的消息
- 2. FB連接 - 可用於與多個用戶共享消息嗎?
- 3. ActiveMQ:多用戶連接到一個隊列,但只有一個用戶接收所有消息
- 4. 在Rails中使用Devise時,我需要「用戶」控制器嗎?
- 5. 需要用戶從列表中選擇連接YESOD的兩個用戶
- 6. Permissions:我不需要用戶信息
- 7. 我需要使用mysql_close(連接)嗎?
- 8. 我需要一個連接來使用ActiveRecordObject.new嗎?
- 9. 做連接表需要在rails中使用常規命名嗎?
- 10. 我可以從我的用戶那裏得到NSError消息嗎?
- 11. 連接到需要用戶名,密碼和使用Axis2/C
- 12. 與連接到不止一個用戶
- 13. 將Rails 3應用程序用戶帳戶連接到用戶的Twitter帳戶
- 14. 我需要在Linux中爲Nagios用戶創建一個帳戶嗎?
- 15. 將一個消息流連接到另一個消息流
- 16. 扭曲 - 我需要定期連接/斷開客戶端連接
- 17. 我需要使用連接
- 18. MySQL如何記錄線程連接(我需要用戶和IP)
- 19. 我需要使用twitter api逐個獲取直接消息
- 20. 我在連接到Facebook時得到一個空用戶
- 21. 我需要創建一個文本文件的用戶列表
- 22. 如何連接到需要用戶名和密碼的網站
- 23. 連接到需要用戶/密碼的網站
- 24. IBM Cognos報告在連接到TM1時需要用戶名稱
- 25. JOIN兩個表(一個需要連接)
- 26. Rails消息此用戶按鈕
- 27. 重寫另一個用戶消息
- 28. LinkedIn發送消息到一個連接
- 29. 需要找到用戶ID
- 30. 用戶表只需要一次
這確實工作正常,謝謝你,我將實施它。我仍然好奇這是否是最好的方法呢? – re5et 2010-10-28 01:31:02
另外,如果有不同於你想在Message中引用的sender_id和recipient_id的關鍵字,是否有一些奇特的方法來定義「本地」鍵? – re5et 2010-10-28 01:44:44
@ re5et是的,那將是':primary_key' – 2010-10-28 03:03:45