0

我想实现用户A可以向用户B发送消息的功能。假设用户A正在查看用户B的配置文件并单击发送消息链接,我如何确保只有用户B将会收到该消息。换句话说,在创建操作中,我如何捕获用户B?我能够在新操作中捕获用户B,但不能在创建操作中捕获。这是我到目前为止:如何捕获发送msg的创建操作中的用户?

class MessagesController < ApplicationController 

    def new 
     @message = Message.new 
     @recipient = User.find_by_identifier!(params[:id]) 
    end 

    def create 
     @message = Message.new(params[:message]) 
     @message.recipient = @recipient 
     @message.sender = current_user 
     if @message.save 
     flash[:notice] = "Message has been sent" 
     redirect_to messages_path(:mailbox=>:sent) 
     else 
     render :action => :new 
     end 
    end 
end 

因此,发送消息链接传递给新动作的用户B的参数。因此@recipient中的新动作是用户B,我可以显示用户B的姓名和照片。但@recipient在创建操作中为零。我如何确保创建操作中的@recipient是用户B?

回答

1

添加一个隐藏的字段到您的提交消息表单,这是收件人的用户ID。

在您的形式:

<%= f.hidden_field :recipient_id, :value => @recipient.id %> 

这样,你的PARAMS将有收件人和您将创建与收件人信息的新消息。

这也取决于你的创建动作的路线是什么。如果路线中有recepient_id,则可以像在new操作中那样再次使用它。

1

控制器中的实例变量仅适用于一个请求 - @recipientcreate请求期间不会再从new中设置。

所以再看一遍!确保:id仍然存在于你的HTTP参数中,并且只是做@message.recipient = User.find(params[:id])

+0

感谢这也帮助! – pratski 2013-04-22 10:51:10

相关问题