【问题标题】:Rails namespacing error?Rails命名空间错误?
【发布时间】:2012-10-24 19:41:45
【问题描述】:

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

namespace :admin do
  resources :users
  resources :events
end

我使用 Rails 提供的脚手架生成了 User 模型,然后我简单地使用 Rails 的 generate 生成了一个 admin/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-way 方式重新执行此操作,则可以加分!好吧,无论如何我都会这样做! :D


更新

哦,我差点忘记了一些可能相关的东西!我还让Admin::UsersController继承自Admin::AdminController(通常又继承自ApplicationController):

Admin::UsersController &lt; Admin::AdminController

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2


    【解决方案1】:

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

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

    redirect_to admin_user_path(@user) #...
    

    【讨论】:

    • 好的,这确实解决了我遇到的问题。但是,有更多类似的,所以我也不得不以类似的方式更新更多的东西。是否有一种正确的方式来做到这一点?老实说,我不确定要寻找什么。我的 Rails 术语非常基础!
    • 并非如此 - 如果您使用命名空间,那么您需要确保控制器和视图中使用的所有路由都在需要时引用该命名空间。
    • 该死!嗯,非常感谢你的帮助!另外,是否有一些参考列表可以找到命名约定,例如您想出的admin_user_path
    • 您可以通过rake routes找到具体路线。除此之外,看看this guide
    猜你喜欢
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 2013-02-07
    相关资源
    最近更新 更多