动态类加载:Ruby中的类是否有“method_missing”?

时间:2011-06-22 08:27:02

标签: ruby-on-rails ruby

在我正在处理的Rails应用程序上,我有一个与单表继承模型“Node”相关的模型“Type”:Node的任何可能的子类都被定义为types表中的Type。 / p>

现在可以在初始化程序中加载所有类,但我只想在需要时加载子类。

我能想到的最佳解决方案是对未初始化的常量进行回退,该常量将检查该常量是否可以表示应用程序中的类,类似于method_missing的类。

我想就如何以及在何处定义此逻辑提出一些建议,或者是否有更好的解决方案。

4 个答案:

答案 0 :(得分:16)

我不知道这是否是新的,但我认为值得补充。可以使用缺少方法作为类方法

class Example
  def method_missing(method_name, *arguments, &block)
    puts 'needs this instance method'
  end

  def self.method_missing(method_name, *arguments, &block)
    puts 'needs this class method'
  end
end

答案 1 :(得分:14)

Module#const_missing

http://apidock.com/ruby/Module/const_missing

我认为你可以(ab)根据自己的需要使用它。

答案 2 :(得分:4)

有const_missing方法:它就像method_missing一样,但它是关于常量的

http://ruby-doc.org/core/classes/Module.html#M000489

答案 3 :(得分:-1)

也许你可以rescue一个未定义的常量错误并加载/创建你的类。