我在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
那么您应该不会有任何问题。