I have a resourceful route, with a post route nested within it:
resources :groups, :only => [:index, :show] do
post 'send_audit_reminder', :on => :member
end
If I run rake routes, this route shows up just fine:
send_audit_reminder_group POST /groups/:id/send_audit_reminder(.:format)
{:controller=>"groups", :action=>"send_audit_reminder"}
However, I can’t seem to figure out how to refer to the send_audit_reminder URL for a given route. I’ve tried send_audit_reminder_group_path(@group) and send_audit_reminder_url(@group), which both give me the following error:
No route matches {:controller=>"groups", :action=>"send_audit_reminder"}
As you can see from rake routes, there is indeed a route that matches those parameters, and there is also a matching method on the controller.
How can I find the path or URL for this route? I would like not to hard code it, since our apps are deployed to subdirectories on the same virtual host, so a hard-coded absolute path won’t work.
And where would I look for documentation or information on this in the future? Since these path and URL helper methods are generated from my routes, I obviously can’t look for documentation, and while rake routes tells me that the route is there, it doesn’t appear to be there when I try and get the URL.
It might be that you’re missing the placeholders and it can’t route because of that. The following should work based on your definition:
Any time you see identifiers like
:idor:group_idin your route, you must supply them unless they are in brackets, which declares them as optional, as is the case here with:format. The arguments need to be supplied in the same order they are declared. For this:The arguments to this route would be
user_idandidand both must be supplied. Generally with routes you can either use a literal number or string, or a model that supportsto_paramas all ActiveRecord::Base-derived ones do.This all stems from declaring with
:member, meaning it is specific to a particular record, and not:collectionwhere that is omitted. The Rails Routing Guide explains more.