我正在创建一个简单的建议框应用程序(学习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,但这个错误毫无意义,我想了解导致它的原因。
非常感谢任何见解。
答案 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以获得更好的理解