我在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

难道我做错了什么?

最佳答案

Rails能够自动在应用程序/模型的子文件夹中找到正确命名的类,而无需执行任何特殊操作。由于您已将应用程序/模型的子文件夹添加到自动加载路径,因此Rails现在希望在这些位置中找到未命名的类。

如果删除自动加载路径更改并按照Mohanraj的建议定义您的类,请执行以下操作:

# app/models/system/admin_user.rb
module System
  class AdminUser
    # your code here
    # ...
  end
end

那么您应该不会有任何问题。

10-05 20:59
查看更多