【问题标题】:rails namespace uninitialized constantrails 命名空间未初始化常量
【发布时间】:2012-09-07 07:36:02
【问题描述】:

我正在我的应用程序中制作管理面板,我为管理员制作了脚手架用户控制器(用户模型已经存在),如下所示:

rails g scaffold_controller Admin::User username:string password_digest:string role:string

在路线中

namespace :admin do
resources :users
resources :dashboard
end

和 controllers/admin/users_controllers.erb 看起来像

class Admin::UsersController < ApplicationController
  # GET /admin/users
  # GET /admin/users.json
  def index
    @admin_users = Admin::User.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @admin_users }
    end
  end

所以当我转到 url /admin/users 时出现以下错误:

NameError in Admin::UsersController#index

uninitialized constant Admin::User

我该如何解决这个问题

谢谢

【问题讨论】:

  • app/models/admin/user.rb 长什么样子?

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


【解决方案1】:

如果您预先存在的 User 模型没有命名空间,请尝试替换

@admin_users = Admin::User.all

@admin_users = ::User.all

【讨论】:

  • @admin_users = ::User.all 给出路由错误:未定义的方法 `user_path'
  • scaffold 生成的代码期望您的User 模型在模块Admin 中,就像控制器一样。确保你的routes.rb 有类似namespace :admin { resources :users } 的东西;然后转到您的app/views/admin/users/index.html.erb 并将link_to 'Show', admin_user 更改为link_to 'Show', admin_user_path(admin_user);和link_to 'Destroy', admin_user, ...link_to 'Destroy', admin_user_path(admin_user), ...
【解决方案2】:

我认为生成器没有创建目录 models/admin 所以你应该调用 User.all 而不是 Admin::User.all。

检查 user.rb 是在 models 还是 models/admin...

【讨论】:

  • 没有目录models/admin...我必须为admin命名空间创建单独的模型,而且User.all给出路由错误“未定义的方法`user_path'”
  • 如果你想是的......但这不是必需的。我认为在你的情况下你不想要那个。用户应该在目录模型中,然后您将始终调用 User.all。
  • 给出路由错误“未定义的方法`user_path'”这是因为你没有users_controller,而是一个admin_users_controller,所以你有admin_users_path而不是users_path......并且在你有的路线中命名空间 :admin 做资源 :users 而不是资源 :users 命名空间 admin
【解决方案3】:

在我的特殊情况下,我正确命名了文件和类,但包含 文件夹 的命名不正确

我有:

/models/maps/type.rb

我不得不把它改成:

/models/map/type.rb

注意单数文件夹名称。将其更改为单数允许 Rails 自动加载正确的类,并且在运行时不再出现此错误。

【讨论】:

    猜你喜欢
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多