假设我有这样的东西
class Major < ActiveRecord::Base
def self.my_kids
self.subclasses.collect {|type| type.name}.sort
end
end
class MinorOne < Major
end
class MinorTwo < Major
end
在 Rails 2.3 中,我可以调用 Major.my_kids 并返回一个子类名称数组,但在 Rails 3.0.3 中,我返回一个空数组,除非我先加载子类。这对我来说似乎是错误的,我是否遗漏了什么或者这是 Rails 3 的新功能?
最佳答案
据我所知,Rails 2 和 Rails 3 在 subclasses
方法的使用方面没有区别。您可能认为它之前可以正常工作,因为子类已经加载。由于 Rails 动态加载大多数文件,父类无法知道从它派生的任何类,除非它在同一个文件中定义。确保加载所有模型的最简单方法,您可以简单地对 app/models
目录中的所有文件调用 require
:
Dir.glob(RAILS_ROOT + '/app/models/*.rb').each { |file| require file }
另一件需要注意的事情是,在 Rails 控制台中发出 reload!
命令后,subclasses
方法不起作用。
关于ruby-on-rails - Rails 2 和 3 之间子类功能的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4392772/