我正在开发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行:
也许我的数据库结构错了?有人可以建议更有效的设计吗?
提前谢谢。
答案 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