开发者

URL helper for a post route in a resource

开发者 https://www.devze.com 2023-03-14 22:59 出处:网络
I have a resourceful route, with a post route nested within it: resources :groups, :only => [:index, :show] do

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消