Rails命名空间错误?

3

我在config/routed.db中有这个:

namespace :admin do
  resources :users
  resources :events
end

我使用Rails提供的脚手架程序生成了User模型,然后使用Rails的generate简单地生成了一个admin/admin控制器,并将所有与用户相关的内容简单地移动到控制器/视图/帮助程序子目录中。是的,我确实需要在一些地方添加admin_,并且在表单部分中,我必须将form_for(@user)改为form_for([:admin, @user])

当我尝试创建新用户(即POST用户数据)时,我会收到以下错误消息:

undefined method `user_url' for #<Admin::UsersController:0x13f408e0>

应用程序级别的跟踪显示错误在此处引发:
app/controllers/admin/users_controller.rb:47:in `create'

这个错误产生的代码行是:
format.html { redirect_to @user, :notice => 'User was successfully created.' }

上述代码行位于respond_to块中。
那么,我有两个问题:
1. 我该如何解决这个问题? 2. 是否有更聪明、更好的Rails方式来处理这个问题?
此外,如果您建议我在更聪明、更好的Rails方式下重新进行操作,那么将额外获得奖励分数!不过,无论如何我都会这样做!:D
更新
哦,我差点忘了一些相关的事情!我还让Admin::UsersController继承自Admin::AdminController(通常又继承自ApplicationController): Admin::UsersController < Admin::AdminController
1个回答

5
您需要在重定向中使用命名空间:

redirect_to [:admin, @user] #...

或者

redirect_to admin_user_path(@user) #...

好的,这确实解决了我遇到的问题。但是,还有更多类似的问题,所以我不得不以类似的方式更新更多内容。也许有一个正确的Rails方法来做到这一点吗?说实话,我不太确定该寻找什么。我的Rails术语非常基础! - omninonsense
不一定-如果您正在使用命名空间,则需要确保控制器和视图中使用的所有路由在必要时都引用该命名空间。 - Thilo
该死!好的,非常感谢你的帮助!另外,是否有一些参考列表可以找到命名约定,例如你想出的 admin_user_path - omninonsense
2
你可以使用 rake routes 命令查看具体的路由信息。除此之外,还可以参考这个指南 - Thilo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接