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:
send_audit_reminder_group_path(group)
Any time you see identifiers like :id
or :group_id
in 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:
/example/:user_id/groups/:id
The arguments to this route would be user_id
and id
and both must be supplied. Generally with routes you can either use a literal number or string, or a model that supports to_param
as all ActiveRecord::Base-derived ones do.
This all stems from declaring with :member
, meaning it is specific to a particular record, and not :collection
where that is omitted. The Rails Routing Guide explains more.
精彩评论