Rails路线:资源错误单数

时间:2015-08-04 14:53:58

标签: ruby-on-rails ruby routes

我的routes.rb(Rails 4.1.4)中有以下行:

resources :request_caches

但是,当我运行rake routes时,我得到以下输出:

request_caches    GET    /request_caches(.:format)            request_caches#index
                  POST   /request_caches(.:format)            request_caches#create
new_request_cach  GET    /request_caches/new(.:format)        request_caches#new
edit_request_cach GET    /request_caches/:id/edit(.:format)   request_caches#edit
request_cach      GET    /request_caches/:id(.:format)        request_caches#show
                  PATCH  /request_caches/:id(.:format)        request_caches#update
                  PUT    /request_caches/:id(.:format)        request_caches#update
                  DELETE /request_caches/:id(.:format)        request_caches#destroy

如您所见,Rails以某种方式将request_caches复数映射到request_cach单数。但它应该是request_cache。这是某种特殊情况,因为caches这个词?我也玩过

resources :request_caches, as: :request_cache

但是这导致错误的路线,如request_cache_index。此外,我认为这是一项标准任务,应该使用Rails实习生路线助手清楚地解决。

那么,我做错了什么?

3 个答案:

答案 0 :(得分:6)

Rails猜测。这不完美。在config/initializers/inflections.rb添加

ActiveSupport::Inflector.inflections(:en) do |inflect|
   inflect.irregular 'request_cache', 'request_caches'  
end

您需要在初始化程序中重新启动服务器。

答案 1 :(得分:2)

看看File f = new File(file); FileInputStream is = new FileInputStream(f); StringBuilder encoded = new StringBuilder(); int y; while( (y = is.read()) != -1 ){ // ... } 。评论中应该有一些例子。

这样的事情可以解决问题:

config/initializers/inflections.rb

确保在更改初始化程序后重新启动服务器。

答案 2 :(得分:2)

正如我所说,你可以通过改变config/initializers/inflections.rb如下所示来实现它

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.irregular 'request_cache', 'request_caches'
end