Ruby on rails RubyonRails:使用方法名';请求';输入控制器发生故障

Ruby on rails RubyonRails:使用方法名';请求';输入控制器发生故障,ruby-on-rails,Ruby On Rails,我完全不知道我对下面的代码做了什么错误。我试图在我的应用程序中实现一个消息传递系统,但希望它能够处理不同类型的消息。在本例中,我想创建一个“请求”消息:message_type=>1 我希望在单击链接时创建这个实例,而不是像通常那样使用表单。以下是我如何在show erb文件中为“用户”设置的: 这将导致以下错误消息:未定义nil:NilClass的“rewrite”方法,跟踪如下所示 c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib

我完全不知道我对下面的代码做了什么错误。我试图在我的应用程序中实现一个消息传递系统,但希望它能够处理不同类型的消息。在本例中,我想创建一个“请求”消息:message_type=>1

我希望在单击链接时创建这个实例,而不是像通常那样使用表单。以下是我如何在show erb文件中为“用户”设置的:

这将导致以下错误消息:未定义nil:NilClass的“rewrite”方法,跟踪如下所示

 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'
我在routes.rb文件中使用了map.resources:messages,并在user和message模型中做了相应的:has_many和:belling_关联


编辑:另外需要注意的是保存正在成功,因为一旦根地址手动输入到地址栏中,就会显示“flash”通知,说明已进行了保存。使用开发控制台,它确实存在,因此重定向出现了问题。

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

你可能想重命名该操作,我很确定
请求
在控制器中意味着什么

为什么不将操作从
请求
重命名为
创建
,看看是否有帮助

因此,代码将是:

在视图中

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

将其更改为message_path(:id=>@message.id)--如果失败,也记录id,并发布您得到的信息。此外,如果达到“else”条件,则肯定会失败。下面是服务器的响应:正在处理ApplicationController请求(对于127.0.0.1,2010-05-17 18:52:51)[get]参数:{“action”=>“request”,“id”=>“3”,“controller”=>“messages”}NoMethodError(nil:NilClass的未定义方法
rewrite:(eval):16:in
message\u path'app/controllers/messages\u controller.rb:11:in
request'-e:2:in
load'-e:2渲染救援/\u跟踪(73.0ms)渲染救援/\u请求和\u响应(3.0ms)渲染救援/布局(内部\u服务器错误)哇。谢谢。这是一个非常令人沮丧的考验。我希望这些错误消息更具描述性。这很不幸,正如我在回答中指出的,这个“else”块仍然是一个等待发生的错误。我很高兴你解决了眼前的问题。是的,我实际上刚刚将两个重定向都改为“redirect\u to:back”,但谢谢!
 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'
<%=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