Question

I have the following routes:

resources :businesses, only: [:show, :index, :new, :create] do
  resources :pledge_drives
end

This creates the following:

% rake routes | grep pledge
     business_pledge_drives GET    /businesses/:business_id/pledge_drives(.:format)                                         pledge_drives#index
                            POST   /businesses/:business_id/pledge_drives(.:format)                                         pledge_drives#create
  new_business_pledge_drife GET    /businesses/:business_id/pledge_drives/new(.:format)                                     pledge_drives#new
 edit_business_pledge_drife GET    /businesses/:business_id/pledge_drives/:id/edit(.:format)                                pledge_drives#edit
      business_pledge_drife GET    /businesses/:business_id/pledge_drives/:id(.:format)                                     pledge_drives#show
                            PUT    /businesses/:business_id/pledge_drives/:id(.:format)                                     pledge_drives#update
                            DELETE /businesses/:business_id/pledge_drives/:id(.:format)                                     pledge_drives#destroy

I do not want the URL helper method to be called business_pledge_drife_path. How can I correct Rails in its singularization of drives? The actual URLs are fine.

Edit: this answer got it right. I added the following to config/initializers/inflections.rb:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.plural 'drive', 'drives'
  inflect.singular 'drives', 'drive'
end

Now my routes are:

     business_pledge_drives GET    /businesses/:business_id/pledge_drives(.:format)                                         pledge_drives#index
                            POST   /businesses/:business_id/pledge_drives(.:format)                                         pledge_drives#create
  new_business_pledge_drive GET    /businesses/:business_id/pledge_drives/new(.:format)                                     pledge_drives#new
 edit_business_pledge_drive GET    /businesses/:business_id/pledge_drives/:id/edit(.:format)                                pledge_drives#edit
      business_pledge_drive GET    /businesses/:business_id/pledge_drives/:id(.:format)                                     pledge_drives#show
                            PUT    /businesses/:business_id/pledge_drives/:id(.:format)                                     pledge_drives#update
                            DELETE /businesses/:business_id/pledge_drives/:id(.:format)                                     pledge_drives#destroy
Was it helpful?

Solution

Most of the time, rails knows about the correct pluralizations of the words, e.g: model name. However, In other cases, You can define correct conversions in rails using Inflections.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top