1

我正在rails 3上开发一个消息系统。我的数据库结构大致如下:

users:  
  id  
  name  

messages:  
  id  
  body

users_messages:  
  user_id  
  message_id  
  direction  
  is_read  
  created_at  

我想我必须使用 *has_many :through* 关联才能使用关系模型:

class User < ActiveRecord::Base
  has_many :user_messages
  has_many :messages, :through => :user_messages
end

class UserMessages < ActiveRecord::Base
  belongs_to :users
  belongs_to :messages
end

class Messages < ActiveRecord::Base
  has_many :user_messages
  has_many :users, :through => :user_messages
end

我可以通过呼叫user.messages和检测方向的传入/传出来获取所有用户的消息。我只是不太明白我如何建立一种能够做到的关系:

  message.sender  
  message.recipient
  user.messages.first.recipient ...

以及每条消息在 user_messages 表中至少需要 2 行:

  user_id_sender , message_id, outgoing ....
  user_id_recipient, message_id, incoming ....  

也许我的数据库结构是错误的?一些机构可以提出更有效的设计吗?

先感谢您。

4

1 回答 1

0

db schema:

messages:
  id
  sender_id
  recipient_id
  body  

app/model/message.rb:

class Messages < ActiveRecord::Base
  has_many :users, :through => :user_messages
  belongs_to :sender, :class_name => 'User', :foreign_key => 'sender_id'
  belongs_to :recipient, :class_name => 'User', :foreign_key => 'recipient_id'
end

by doing so, you can do:

message.sender  
message.recipient
user.messages.first.recipient
于 2013-01-13T01:45:40.797 回答