自动加载路径和STI继承

时间:2010-10-23 01:38:31

标签: ruby-on-rails ruby

我有两个模型UserManager。我使用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目录中,一切都有效。在我的应用程序中,生成的模型驻留在自定义位置,因此这个要求。

1 个答案:

答案 0 :(得分:0)

manager.rb文件保存在app/models文件所在的user.rb目录中。这就是rails寻找模型的地方。将管理器模型隐藏在不同的目录中没有任何好处。

一旦你这样做,你也可以摆脱负载路径的捣乱。