23tux
23tux

Reputation: 14746

Rails routes: Wrong singular for resources

I have the following line in my routes.rb (Rails 4.1.4):

resources :request_caches

However, when I run rake routes I get the following output:

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

As you can see, Rails somehow maps request_caches plural to request_cach singular. But it should be request_cache. Is this some kind of special case, because of the word caches? I've also played around with

resources :request_caches, as: :request_cache

But this results in wrong routes like request_cache_index. And furthermore, I think this is a standard task and should be solved clearly using Rails intern route helpers.

So, what am I doing wrong?

Upvotes: 6

Views: 1392

Answers (3)

Pavan
Pavan

Reputation: 33552

As I said,you can achieve it by changing config/initializers/inflections.rb like below

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

Upvotes: 2

amiuhle
amiuhle

Reputation: 2783

Have a look at config/initializers/inflections.rb. There should be some examples in the comments.

Something like this should do the trick:

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

Be sure to restart the server after making changes to an initializer.

Upvotes: 2

j-dexx
j-dexx

Reputation: 10416

Rails guesses. It's not perfect. In config/initializers/inflections.rb add

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

You'll need to restart the server as it's in an initializer.

Upvotes: 12

Related Questions