0

我正在创建一个简单的建议框应用程序(用于学习 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,但这个错误毫无意义,我想了解是什么原因造成的。

任何见解将不胜感激。

4

2 回答 2

2

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

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

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

于 2013-05-13T15:40:56.020 回答
1

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

于 2013-05-13T15:37:11.670 回答