【问题标题】:Routing problem in railsRails中的路由问题
【发布时间】:2011-04-04 21:44:11
【问题描述】:

//见下文更新

错误:

No route matches {:controller=>"conversations", :action=>"reply", :id=>nil, :board_id=>nil}

参数转储:

{"board_id"=>"2",
 "id"=>"3"}

日志:

Started GET "/boards/2/conversations/3/reply" for 127.0.0.1 at Mon Apr 04 23:40:59 +0200 2011
  Processing by ConversationsController#reply as HTML
  Parameters: {"board_id"=>"2", "id"=>"3"}
  Board Load (0.1ms)  SELECT "boards"."id" FROM "boards" WHERE ("boards"."id" = 2) LIMIT 1
  Board Load (0.6ms)  SELECT "boards".* FROM "boards" WHERE ("boards"."id" = 2) LIMIT 1
Rendered conversations/_reply_form.html.erb (1.3ms)
Rendered conversations/reply.html.erb within layouts/application (9.4ms)
Completed   in 30ms

ActionView::Template::Error (No route matches {:controller=>"conversations", :action=>"reply", :id=>nil, :board_id=>nil}):
    1: <%= form_for(@comment, :url => reply_board_conversation_url(:board_id=>@board_id, :id=>@conversation_id)) do |f| %>
    2:   <% if @comment.errors.any? %>
    3:     <div id="error_explanation">
    4:       <h2><%= pluralize(@comment.errors.count, "error") %> prohibited this reply from being saved:</h2>
  app/views/conversations/_reply_form.html.erb:1:in `_app_views_conversations__reply_form_html_erb__999049254_2171331720_2303070'
  app/views/conversations/reply.html.erb:4:in `_app_views_conversations_reply_html_erb___838091718_2171408600_0'

Rendered /opt/local/lib/ruby/gems/1.8/gems/actionpack-3.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.1ms)
Rendered /opt/local/lib/ruby/gems/1.8/gems/actionpack-3.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (982.1ms)
Rendered /opt/local/lib/ruby/gems/1.8/gems/actionpack-3.0.0/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (1001.7ms)

在我的 routes.rb 中,它的:

  get '/boards/:board_id/conversations/:id/reply' => "conversations#reply", :as => :reply_board_conversation
  post '/boards/:board_id/conversations/:id/reply' => "conversations#save_reply", :as => :reply_board_conversation

  resources :boards do 
    resources :conversations
  end

有谁知道我做错了什么?提前致谢!

// 更新:

找出参数。但是,现在我们有一个新错误.. 查看输出:

Started GET "/boards/2/conversations/3/reply" for 127.0.0.1 at Tue Apr 05 11:29:52 +0200 2011
  Processing by ConversationsController#reply as HTML
  Parameters: {"board_id"=>"2", "conversation_id"=>"3"}
  Board Load (0.2ms)  SELECT "boards"."id" FROM "boards" WHERE ("boards"."id" = 2) LIMIT 1
  Board Load (0.2ms)  SELECT "boards".* FROM "boards" WHERE ("boards"."id" = 2) LIMIT 1
Rendered conversations/_reply_form.html.erb (4.3ms)
Rendered conversations/reply.html.erb within layouts/application (6.3ms)
Completed   in 26ms

ActionView::Template::Error (undefined method `model_name' for NilClass:Class):
    1: <%= form_for(@comment, :url => reply_board_conversation_url(:board_id=>@board.id, :id=>@conversation_id)) do |f| %>
    2:   <% if @comment.errors.any? %>
    3:     <div id="error_explanation">
    4:       <h2><%= pluralize(@comment.errors.count, "error") %> prohibited this reply from being saved:</h2>
  app/views/conversations/_reply_form.html.erb:1:in `_app_views_conversations__reply_form_html_erb__999049254_2174448800_2303070'
  app/views/conversations/reply.html.erb:1:in `_app_views_conversations_reply_html_erb___838091718_2174498080_0'

Rendered /opt/local/lib/ruby/gems/1.8/gems/actionpack-3.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.1ms)
Rendered /opt/local/lib/ruby/gems/1.8/gems/actionpack-3.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (757.4ms)
Rendered /opt/local/lib/ruby/gems/1.8/gems/actionpack-3.0.0/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (774.2ms)

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 routing rails-routing


    【解决方案1】:

    您提供的日志表明@board_id 和@conversation_id 变量为零。

    确保您在ConversationsController 的回复操作中实际设置了@board_id@conversation_id 的值。我怀疑您要么填充board_id,要么完全忘记执行@board_id = params[:board_id] 之类的操作。

    更新 要回答您问题的下一部分,我猜 @comment 尚未实例化。在您的控制器操作中的某处,您应该执行以下操作:

    @comment = Comment.new(params[:comment]
    

    这应该从任何现有的表单数据创建一个评论,或者如果没有任何表单数据,则创建一个新的评论。

    【讨论】:

    • 好的,在参数上完成了工作。但是,现在出现了一个新错误:“NilClass:Class 的未定义方法 'model_name'” - 还有其他提示吗?谢谢..
    【解决方案2】:

    您的 @board_id@conversation_id 变量都为零,如错误消息中所述:

    No route matches {:controller=>"conversations", 
                      :action=>"reply",
                      :id=>nil,
                      :board_id=>nil
                     }
    

    注意此处的:id:board_id 参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      相关资源
      最近更新 更多