rails方式用户到用户消息,我需要一个连接表吗?

时间:2010-10-28 00:56:22

标签: ruby-on-rails activerecord

快速提问(我认为)。我有用户,我想让他们互相发送消息。我的问题是,我应该有一个用户表,一个消息表和一个用户到消息连接表,还是应该只在消息表中存储to_user_id和from_user_id。如果是后者,该协会会是什么样的呢?你甚至可以引用一个关联的“本地”密钥吗?

2 个答案:

答案 0 :(得分: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没有更清晰的方式来做我所知道的自我引用关联。

答案 1 :(得分: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