I have a question about regarding the use of 'has_one' in this scenario:
I'm not sure that it's 'has_one' that you need here. 'has_one' implies a one-to-one relationship - like Order -> Invoice.
Also, I may be wrong, but i don't think you need that joiner table. The joiner table suggests a many-to-many relationship: a message can belong to many users, a user can have many messages.
I think what you're looking for is a one-to-many relationship: A user can have many messages, a message belongs to a user.