Sending messages between users

Hi, I’m trying to create an web app where users can write messages to each other. I use the restful_authentication plugin for the users. So they have an user_id. How ever the messages should have a:

  • sender
  • receiver
  • content As i saw in some screencast the association use the user_id to connect users to something. But in my model there would be 2 user_id column which obviously doesn’t work. So how do I do it? My workaround was to create a receiver and sender model which contained a user_id and a message_id. Then the message contained a sender_id, receiver_id and the content. However now I’m stuck somehow. Maybe it’s because 2:30am here and I should be in bed. I don’t know. Is there an easier workaround? Some tutorials, maybe? How do I collect my mails? Have a controller named messages where I tried this, but it doesn’t work (I thing my association declaration are the cause): @inbox = current_user.message.find_by_receiver_id(:user) The Models: class Message < ActiveRecord::Base belongs_to :sender has_one :receiver validates_presence_of :sender validates_presence_of :receiver validates_length_of :content, :maximum => 4096 end class Receiver < ActiveRecord::Base belongs_to :message end class Sender < ActiveRecord::Base has_many :message end class User < ActiveRecord::Base (restful_authentication plugin)

    Virtual attribute for the unencrypted password

    attr_accessor :password … attr_accessible :login, :email, :password, :password_confirmation … end

Greetings and thanks for any kind of help

Chris

Chris,

Why don't you use (or check how it's done) restful easy messages? Alternatively, LOVD (lovdbyless.com) does it all.

Cheers, Sazima

Hello Chris, may I try to help you? I thing you need something like this:

class *Message* < ActiveRecord::Base

  belongs_to :sender, :class_name => 'User', :foreign_key => 'sender_id'   belongs_to :receiver, :class_name => 'User', :foreign_key => 'receiver_id'

end

class *User* < ActiveRecord::Base (restful_authentication plugin)   # Virtual attribute for the unencrypted password   attr_accessor :password   ...   attr_accessible :login, :email, :password, :password_confirmation

  has_many :sent_messages, :class_name => 'Message' , :foreign_key => 'sender_id'   has_many :received_messages, :class_name => 'Message' , :foreign_key => 'receiver_id'   ... end

and then you can do this: @inbox = current_user.received_messages.find_by_receiver_id(:user)

I'm dont test this, but it shold work) Sorry for my english.