我正在尝试覆盖从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或重定向吗?我一直试图寻找这个问题,并且没有能够提出太多问题。
提前致谢。
答案 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;对
要解释错误,@foo
是Admin::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