has_many :through

I'm wondering why the has_many :through? Your join model has no extra
attributes at all. Why not just

Message    belongs_to :sender    has_and_belongs_to_many :recipients

User    has_many :sent_messages, :class_name => 'Message'    has_and_belongs_to_many :received_messages, :class_name => 'Message'

This gives you all the scenarios you desired and appears to be much
simpler than the path you are currently going down. I'd love to hear
other options using has_many :through with more attributes on the
join model.

-Michael http://javathehutt.blogspot.com