rails - 帮助尝试在子文件夹中使用模型

时间:2014-06-03 15:04:31

标签: ruby-on-rails ruby

我在SQLite中使用Rails 4和ActiveAdmin。

1。我已经生成了这些模型并将文件移动到文件夹中:

app
  models
    system
       - admin_user.rb
       - customer.rb
    resources
       - document.rb

2。添加到config / application.rb:

config.autoload_paths += Dir[Rails.root.join('app', 'models', '{**/}')]

3。在模型文件中,我只是在模型名称中添加了前缀:

class System::AdminUser < ActiveRecord::Base
    # Include default devise modules. Others available are:
    # :confirmable, :lockable, :timeoutable and :omniauthable
    devise :database_authenticatable,
           :recoverable, :rememberable, :trackable, :validatable
    # Include default devise modules. Others available are:
    # :confirmable, :lockable, :timeoutable and :omniauthable
    devise :database_authenticatable,
           :recoverable, :rememberable, :trackable, :validatable
end

-

因此,当我尝试运行rake db:migrate时,我收到此错误:

LoadError: Unable to autoload constant AdminUser, expected /Users/john/testing/app/models/System/admin_user.rb to define it

我做错了吗?

1 个答案:

答案 0 :(得分:4)

Rails可以自动地在app / models的子文件夹中找到正确命名空间的类,而无需执行任何特殊操作。由于您已将app / models的子文件夹添加到自动加载路径,因此Rails现在希望在这些位置找到非命名空间的类。

如果删除自动加载路径更改并按Mohanraj建议定义您的类:

# app/models/system/admin_user.rb
module System
  class AdminUser
    # your code here
    # ...
  end
end
那么你应该没有任何问题。