覆盖rails URL helper(form_for)

时间:2017-06-09 20:13:23

标签: ruby-on-rails routing

我正在尝试覆盖从form_for调用的url帮助器。

我的控制器和模型都在" Admin"中命名。模块,并在管理文件夹中休息。 (所以models / admin / foo.rb,controllers / admin / foo_controller.rb)

我的路线是正确的(我相信)

scope module: "admin" do
    resources :foos do
      resources :foo_details
    end 
end

以下是一些代码,用于演示我尝试做什么以及我在哪里得到错误:

<%= form_for(@foo) do |f| %>

我在行的表单上收到错误,其中包含:&#34;未定义的方法`admin_foos_path&#39;对于#&lt;#:0x007f08fd7ffb90&gt;。

当我运行&#39; rake routes&#39;时,我有一个foos的路由,但不是admin_foos。我假设form_for试图访问admin_foos_path,因为应用程序是如何搭建的。

我有办法将admin_foos_path覆盖为foos_path或重定向吗?我一直试图寻找这个问题,并且没有能够提出太多问题。

提前致谢。

2 个答案:

答案 0 :(得分:1)

使用namespace指令

namespace :admin do
  resources :foos do 
    resources :foo_details
  end
end

使用scope只会为您提供foos_path,而namespace会提供admin_foos_path所需的@foo

答案 1 :(得分:1)

  

未定义的方法`admin_foos_path&#39;对

要解释错误,@fooAdmin::Foo而非Foo模型实例,因此form_for默认查找其资源丰富的路线在您的情况下是admin_foos。而且因为它无法找到它,错误也是如此。

  

我有办法将admin_foos_path覆盖为foos_path或   重定向吗?

您可以将表单的网址覆盖到所需的网址,如下所示

<%= form_for(@foo, url: foos_path) do |f| %>

但我认为您需要namespace而不是scope。我建议在controller-namespaces-and-routing

中阅读何时使用范围和命名空间