2010-05-17 36 views
0

我对下面的代码做了什么错误处于绝对的损失。我试图在我的应用程序中实现一个消息传递系统,但希望它处理不同类型的消息。在这种情况下,我想创建':message_type => 1'的“请求”消息。Ruby on Rails:在控制器中使用方法名称'request'失败

不像我通常使用的那样使用表单,我想在链接被点击的时候创建这个实例。这里是我有它设置在展会ERB文件的“用户”:

<%=link_to "Send friend request", :action=>"request", :controller => "messages", :id => @user.id %> 

,并在控制器:

def request 
    @message = Message.new(:sender_id => current_user.id,:user_id => params[:id],:message_type => 1) 
    if @message.save 
     flash[:notice] = 'Message was successfully created.' 
     redirect_to message_path(@message) 
     else 
     redirect_to message_path(@message) 
     end 
    end 

这将导致以下错误消息:未定义的方法`重写“对零:NilClass与跟踪看起来像

c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/whiny_nil.rb:52:in `method_missing' 
    c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/base.rb:634:in `url_for' 
    (eval):16:in `message_path' 
    app/controllers/messages_controller.rb:11:in `request' 

我用map.resources:在routes.rb中文件的消息,并做了相应:Has_或许有帮助许多和:用户和消息模型中的belongs_to关联。

编辑:另外需要注意的是,保存是成功的,因为一旦根地址被手动输入到地址栏中,就会显示“闪存”通知,表示保存已完成。使用开发控制台确实存在,所以有一些与重定向混乱的东西。

回答

2

您可能想要重命名该操作,我确定request意味着控制器中的某些东西。

为什么不重命名行动从requestcreate,看看它是否有帮助。

因此,代码将是:

在视图

<%=link_to "Send friend request", :action=>"create", :controller => "messages", :id => @user.id %> 

在控制器

def create 
    @message = Message.new(:sender_id => current_user.id,:user_id => params[:id],:message_type => 1) 
    if @message.save 
     flash[:notice] = 'Message was successfully created.' 
     redirect_to message_path(@message) 
    else 
     redirect_to message_path(@message) 
    end 
    end 
+0

哇。谢谢。这是一个非常令人沮丧的考验。我希望这些错误信息更具描述性。这很不吉利 – JackCA 2010-05-18 14:44:55

+0

这个“其他”块仍然是一个等待发生的错误,正如我在答案中指出的那样。我很高兴你能解决你的直接问题。 – jdl 2010-05-18 16:15:25

+0

是的,我实际上只是将两个重定向都改为“redirect_to:back”,但谢谢! – JackCA 2010-05-18 17:28:15

0

更仔细地检查您的日志,您可能会发现您的保存失败。不知道哪一行是#11,但我猜测它是在您的else区块中,该区块试图为@message对象创建一个路径,其ID为nil(尚未保存)。

+0

线11是redirect_to的if语句,而不是别的... – JackCA 2010-05-17 22:26:59

+0

将其更改为message_path(:id => @ message.id) - 记录标识以及失败时发布的内容。 – jdl 2010-05-17 22:39:23

+0

另外,如果您的“其他”条件达到了,它肯定会失败。 – jdl 2010-05-17 22:39:51

相关问题