用于消息系统的Rails DB结构

时间:2013-01-13 01:21:14

标签: ruby-on-rails database orm rails-activerecord

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

users:  
  id  
  name  

messages:  
  id  
  body

users_messages:  
  user_id  
  message_id  
  direction  
  is_read  
  created_at  

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

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 ...

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

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

也许我的数据库结构错了?有人可以建议更有效的设计吗?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

db schema:

messages:
  id
  sender_id
  recipient_id
  body  

应用程序/模型/ 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
通过这样做,你可以做到:

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