I want create mini mail service in my website, but i have little problem mapping assotiation. I have two models User and Message, every message have one sender and many recievers. I map sender with user_id field in message and recievers with table messagesusers with user_id and message_id fields. In model message I add belongs_to :user has_many :users and in messagesuser belongs_to :user belongs_to :message I don't know what add in user model, i try with has_many :messages but doesn't work. Thanks and sorry for my poor english
SaThot wrote in post #957715:
I have two models User and Message, every message have one sender and many recievers.
First thing to understand is that there is no many-to-many association here. As you said a Message belongs_to a user and Message has many recipients, which are Users. So you basically just need to add a foreign key to User to keep track of the one-to-many relation Message <--->> User. We just need to do a bit of convention overriding to accomplish this:
User has_many :messages
Message belongs_to :user has_many :recipients, :class_name => "User", :foreign_key => :recipient_message_id
Or if you want to make things more clear you could do:
Message belongs_to :sender, :class_name => "User", :foreign_key => :sender_id has_many :recipients, :class_name => "User", :foreign_key => :recipient_message_id