【问题标题】:Rails routing error when using resource but now when using GET使用资源时Rails路由错误,但现在使用GET时
【发布时间】:2013-05-13 15:26:01
【问题描述】:

我正在创建一个简单的建议框应用程序(学习 Rails),当我转到在我的本地机器上运行的“/suggestion-boxes”时遇到以下 Rails 路由错误(localhost:3000)

"路由错误

没有路线匹配 [GET] "/suggestion-boxes"

在我的 routes.rb 文件中我有:

SuggestionBoxApp::Application.routes.draw do
  resources :suggestion_boxes
end

这是我运行 rake 路由时得到的结果:

suggestion-box-app$ rake routes
suggestion_boxes GET    /suggestion_boxes(.:format)          suggestion_boxes#index
                POST   /suggestion_boxes(.:format)          suggestion_boxes#create
new_suggestion_box GET    /suggestion_boxes/new(.:format)      suggestion_boxes#new
edit_suggestion_box GET    /suggestion_boxes/:id/edit(.:format) suggestion_boxes#edit
 suggestion_box GET    /suggestion_boxes/:id(.:format)      suggestion_boxes#show
                PUT    /suggestion_boxes/:id(.:format)      suggestion_boxes#update
                DELETE /suggestion_boxes/:id(.:format)      suggestion_boxes#destroy

但是,如果我将路由文件修改为

SuggestionBoxApp::Application.routes.draw do
  get "suggestion-boxes" => "suggestion_boxes#index"
end

然后页面“/suggestion-boxes”根据我的 SuggestionBoxesController 中的索引操作显示。

我尝试重新启动我的服务器,但这没有任何影响。虽然我当然可以使用 GET,但这个错误没有任何意义,我想了解是什么原因造成的。

非常感谢任何见解。

【问题讨论】:

    标签: ruby-on-rails routing


    【解决方案1】:

    错误是您没有重命名 REST 路由,而是重命名控制器。 尝试声明

    resources :suggestion_boxes, :as => "suggestion-boxes"
    

    在您的 config/routes.rb 文件中。

    【讨论】:

      【解决方案2】:

      您在代码中的某处调用了不存在的suggestion-boxes 控制器。你的控制器是suggestion_boxes,拼写。因此,如果您有“建议框”,则应替换为“suggestion_boxes”。您添加的代码创建了一个别名,该别名将“suggestion-boxes”与suggestion_boxes 控制器的index 操作相匹配,因此如果这是您想要的效果,则可以解决它。但只需修正拼写即可解决您的问题。如果我想更改用户看到的 URL,我通常使用第二种方法。看看routing doc 以获得更好的理解

      【讨论】:

      • 甚至没有注意到我在一个地方使用破折号而在另一个地方使用下划线 - 吸取了教训!谢谢!
      • @andersr 没问题,它发生了
      猜你喜欢
      • 1970-01-01
      • 2012-06-11
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-18
      • 1970-01-01
      相关资源
      最近更新 更多