资源中的后期路由的URL帮助程序

时间:2011-06-21 20:37:10

标签: ruby-on-rails-3 routes

我有一条足智多谋的路线,其中嵌套了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告诉我路由在那里,当我尝试获取时它似乎不存在网址。

1 个答案:

答案 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解释了更多。