Rails 路线:资源的单数错误

Rails routes: Wrong singular for resources

我的 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 intern route helpers 清楚地解决。

那么,我做错了什么?

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

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

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

看看config/initializers/inflections.rb。评论里应该有例子吧

像这样应该可以解决问题:

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

一定要在更改初始值设定项后重新启动服务器。

就像我说的,你可以通过像下面这样改变config/initializers/inflections.rb来实现它

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