ruby-on-rails - Rails 2 和 3 之间子类功能的差异

标签 ruby-on-rails ruby subclass

假设我有这样的东西

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/

相关文章:

ruby-on-rails - Mongoid 4 (GitHub master) 创建具有重复 ID 的文档

ruby - 如何检查数组中只有一个值不为零?

ruby-on-rails - locale 显然存在时无效

actionscript-3 - AS3 - 接口(interface)是否需要重写,或者类可以从仅由子类使用的接口(interface)调用方法吗?

python - 当子类用 __init__() 调用 super() 时,父类(super class)的对象在哪里/什么?

ruby-on-rails - Rails 将 "action"呈现为自定义 url

ruby-on-rails - 将大量美元值输入到 Rails 货币对象中

ruby-on-rails - 使用 Rails 创建 RSS 提要

python - 在 Python 2 和 Python 3 中子类化内置类型

ruby-on-rails - 有什么方法可以从 heroku 提供 gzip Assets ?