动态类加载:Ruby中是否有类似于“method_missing”的方法用于类?

12

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

现在,通过在初始化器中加载所有类,使这成为可能,但我希望只在需要时加载子类。

我能想到的最好解决方案是,在未初始化的常量上回退并检查该常量是否能够表示应用程序中的一个类,类似于"method_missing"的做法。

我希望能得到一些关于如何在哪里定义这个逻辑或者是否有更好的解决方案的建议。

4个回答

17

我不知道这是否是新的,但我认为它值得添加。可以将method missing用作类方法。

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

15

糟糕!我在几秒钟后发布了相同的答案 :P - Andrea Pavoni
我理解你的意思是(ab)use并不是最佳实践,对吗? :) 如果是这样,任何建议都非常受欢迎和感激。无论如何,这正是我正在寻找的,非常感谢! - amencarini
2
哦,我没有说那个,那只是对于很多时候处于使用和滥用之间的元编程的一点挖苦。很多时候我自己也是罪魁祸首...;-) - Michael Kohl

4

-1
也许你可以通过rescue来解决未定义常量错误并加载/创建你的类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接