我有两个模型User
和Manager
。我使用STI从Manager
模型继承User
。
应用/模型/ user.rb
class User < ActiveRecord::Base
end
custom_lib /模型/ manager.rb
class Manager < User
end
我已将自定义模型添加到加载路径,如下所示:
到config / environment.rb
config.autoload_path += File.join(RAILS_ROOT, "custom_lib", "models")
在开发模式中,每件事都按预期工作。在生产模式中,我收到以下错误:
The single-table inheritance mechanism failed to locate the subclass: Manager
由于某些原因,rails没有加载继承的类。
要解决此问题,我明确要求初始化程序中的类。
配置/初始化/ custom_models.rb
Dir[File.join(RAILS_ROOT, "custom_lib", "models", "*.rb")].each do |file_name|
require(File.join(File.dirname(file_name), File.basename(file_name, ".rb")))
end
我更喜欢使用autoload_path
。我想知道是否有其他人看到过这种行为。
我使用的是Ruby 1.8.7,Rails 2.3.9,Ubuntu
修改1
我知道如果所有模型都驻留在app/models
目录中,一切都有效。在我的应用程序中,生成的模型驻留在自定义位置,因此这个要求。
答案 0 :(得分:0)
将manager.rb
文件保存在app/models
文件所在的user.rb
目录中。这就是rails寻找模型的地方。将管理器模型隐藏在不同的目录中没有任何好处。
一旦你这样做,你也可以摆脱负载路径的捣乱。