I'm developing a messaging system on rails 3. My database structure is roughly as follows:
users:
id
name
messages:
id
body
users_messages:
user_id
message_id
direction
is_read
created_at
I think I have to use *has_many :through* association to be able use relationship model:
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
I can get all user's messages by calling user.messages
and detect incoming/outgoing by direction. I just do not quite understand how I create a relationship that would be able do:
message.sender
message.recipient
user.messages.first.recipient ...
As well as each message requires at least 2 row in user_messages table:
user_id_sender , message_id, outgoing ....
user_id_recipient, message_id, incoming ....
Maybe my database structure is wrong? Can some body suggest more effective design?
Thank you in advance.