How To: Uncountable Names in RESTful Routes
Posted by trevor Mon, 19 Mar 2007 05:03:23 GMT
A couple of times I’ve noticed people saying that uncountable names (like sheep and fish) can’t be used with resource routes in Rails. Well, they can.
# in config/routes.rb
map.resources :fish
In the above example there is a conflict between the generated url helpers for the ‘fish’ collection and the generated url helpers for members of the ‘fish’ collection. Because ‘fish’ is uncountable, both are called fish_path
or fish_url
. And because of the way routes and url helpers are created in a map.resources
call, the member url helpers override the collection ones.
So using the above example, calling fish_path()
raises an error like:
ActionController::RoutingError: fish_url failed to generate from {:controller=>"fish", :action=>"show"} - you may have ambiguous routes, or you may need to supply additional parameters for this route. content_url has the following required parameters: ["fish", :id] - are they all satisifed?
Thankfully that’s not the end of it. You just have to add a :singular
argument when defining your resources:
# in config/routes.rb
map.resources :fish, :singular => :fish_instance
# in your code
fish_path() #=> /fish
new_fish_instance_path() #=> /fish/new
fish_instance_path(1) #=> /fish/1
edit_fish_instance_path(1) #=> /fish/1;edit
That’s all.