使用资源时Rails路由错误,但现在使用GET时

时间:2013-05-13 15:26:01

标签: ruby-on-rails routing

我正在创建一个简单的建议框应用程序(学习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

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

我尝试重启我的服务器,但这没有任何影响。虽然我当然可以使用GET,但这个错误毫无意义,我想了解导致它的原因。

非常感谢任何见解。

2 个答案:

答案 0 :(得分:2)

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

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

config/routes.rb文件中。

答案 1 :(得分:1)

在代码中的某个地方,您正在调用不存在的suggestion-boxes控制器。您的控制器是suggestion_boxes拼写。所以每当你有“建议框”时,你应该用“suggestion_boxes”代替。您添加的代码会创建一个将“suggestion-boxes”与index控制器的suggestion_boxes操作匹配的别名,以便在您想要的影响时将其解析。但只需修复拼写就可以解决问题。如果我想要更改用户看到的URL,我通常会使用第二种方法。请查看routing doc以获得更好的理解