我想在Rails模型中添加一个方法,用于测试。如果我这样做
class Model
def something_new
do_something
end
end
在Rails控制台或运行时加载的文件中,模型被覆盖而不是修改。如果我在上面的行之前添加v = Model.class
之类的内容,则新方法会成功添加到现有类中。显然,需要参考来表示正在重新打开现有的类。
另一方面,可以添加一个方法,比如Fixnum,而不必先引用它。这里发生了什么,以及确保重新打开和修改现有类而不是被覆盖的常用方法是什么?
感谢。
答案 0 :(得分:12)
听起来你在使用它之前不需要课程。当您编写Model.class
并且没有Model类时,Rails会自动为您引入Model。如果您只是编写class Model
,它只会将其视为类定义。只需做require 'model'
即可。
答案 1 :(得分:4)
使用class_eval
,这样你将以正确的方式重新开课
这是关于reopening classes的非常好的文章。
答案 2 :(得分:0)
作为 Chuck 答案的补充,这里是Rails docs的引文:
6.1.1类和模块关键字之后的常量 Ruby对在class或module关键字后面的常量执行查找,因为它需要知道是要创建还是重新打开该类或模块。
如果此时未定义常量,则认为该常量不是丢失的常量,不会触发自动加载。