我有一条足智多谋的路线,其中嵌套了post
路线:
resources :groups, :only => [:index, :show] do
post 'send_audit_reminder', :on => :member
end
如果我运行rake routes
,这条路线显示就好了:
send_audit_reminder_group POST /groups/:id/send_audit_reminder(.:format)
{:controller=>"groups", :action=>"send_audit_reminder"}
但是,我似乎无法弄清楚如何引用给定路线的send_audit_reminder
网址。我已经尝试了send_audit_reminder_group_path(@group)
和send_audit_reminder_url(@group)
,它们都给了我以下错误:
No route matches {:controller=>"groups", :action=>"send_audit_reminder"}
从rake routes
可以看出,确实存在与这些参数匹配的路径,并且控制器上也有匹配方法。
如何找到此路线的路径或网址?我不想对其进行硬编码,因为我们的应用程序已部署到同一虚拟主机上的子目录中,因此硬编码的绝对路径将无效。
将来我会在哪里查找有关此文档或信息?由于这些路径和URL帮助器方法是从我的路由生成的,我显然无法查找文档,而rake routes
告诉我路由在那里,当我尝试获取时它似乎不存在网址。
答案 0 :(得分:2)
可能是您错过了占位符,因此无法路由。以下内容应根据您的定义进行:
send_audit_reminder_group_path(group)
每当您在路线中看到:id
或:group_id
等标识符时,您必须提供它们,除非它们在括号中,并将其声明为可选项,就像{{1}一样}。参数需要按照声明的顺序提供。为此:
:format
此路线的参数将是/example/:user_id/groups/:id
和user_id
,并且两者都必须提供。通常使用路由,您可以使用文字数字或字符串,也可以使用支持id
的模型,因为所有ActiveRecord :: Base派生的都是。
这一切都源于使用to_param
声明,这意味着它特定于特定记录,而不是:member
,其中省略了它。 Rails Routing Guide解释了更多。