Messages between users

I have body: text content: sender_id text: integer receiver_id: integer in message table

I have this in my user model:

   has_many :sent_messages, :class_name => "Message", :foreign_key => "sender_id"
   has_many :received_messages, :class_name => "Message", :foreign_key => "receiver_id"

      

I have this in my posts model:

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

      

After login, when you view another user profile (I mean this link in users view).

I am calling a new message like this:

  <%= link_to "Send a Message",{:controller=>"messages",:action=>"new"}%>

      

I have these codes in message_controller:

 def new
  @message = current_user.sent_messages.build
   end

def create
@message = current_user.sent_messages.build(params[:message])
  if @message.save
  flash[:notice] = "Successfully created message."
  redirect_to root_url
else
  render :action => 'new'
 end
 end
#.....

      

Also I have these codes in views \ messages \ new.html.erb

 <% form_for @message do |f| %>
 <%= f.error_messages %>
  <p>
 <%= f.label :body %><br />
 <%= f.text_field :body %>
  </p>
  <p>
 <%= f.label :content %><br />
 <%= f.text_area :content %>
  </p>
 <p><%= f.submit "Submit" %></p>
  <% end %>

      

After clicking the link, I fill in the body and text and then submit. Everything is saved, but receiver_id is null. I tried many things, but I could not save receiver_id

For example: I have set the link like this:

  <%= link_to "Send a Message",{:controller=>"messages",:action=>"new",
   :receiver_id=>@user.id}%>

      

It sends the user id which I want and I can get that value with parameters, but the problem is I couldn't find a way to store this value in the database while saving others.

+1


a source to share


3 answers


Passing receiver_id

in parameters just gives access to this method new

. You will need to access and save params[:receiver_id]

somewhere in your method new

.



0


a source


Lol I found that I am calling a new message like I mentioned earlier

 <%= link_to "Send a Message",{:controller=>"messages",:action=>"new",
 :receiver_id=>@user}%>

      

then the new method will be the same as in the message model



 def new
 @message =current_user.sent_messages.build(:receiver_id=>params[:receiver_id])
  end

      

And the simplest thing (actual big problem for me :)) in views / messages / new.html.erb add this line to form_for

 <%= f.hidden_field :receiver_id  %>

      

0


a source


try

class MessagesController
   def new
     @message = current_user.sent_messages.build :receiver_id => params[:receiver_id]
   end    
end

      

personally I like to use nested routes in the url like so

domain / users / 123 / posts / new

then you can do

link_to "Send a message", new_user_message( @user )

      

for your controller to say

class MessagesController
   def new
     @message = current_user.sent_messages.build :receiver_id => params[:user_id]
   end    
end

      

0


a source







All Articles