如何在Ruby中调用外部类的方法

我在/lib下有一个文件,有自己的方法。

 # lib/file.rb class File < ApplicationController def my_method ... end end 

但是我无法通过控制台访问该方法

 ruby-1.9.2-p290 :044 > File.my_method NoMethodError: undefined method `my_method' for File:Class 

知道怎么样?

my_methodFile类的实例方法。 这意味着您只能在File类的实例上调用它。

 file = File.new file.my_method 

您可以使用def self.my_method语法将def self.my_method声明为类方法。

 class File < ApplicationController def self.my_method ... end end File.my_method 

但是在类方法中,您不能使用File对象的实例变量。

您尝试将my_method作为类方法调用,但您已将其定义为实例方法。

您应该将其定义为def self.my_method ,或者创建控制器的实例以将其称为实例方法。

此外,由于以下几个原因,您将遇到问题 – (1)Rails期望控制器被命名为FilesController ,(2) File是标准库中的类。 我鼓励您将类名更改为files_controller.rb ,并将文件本身重命名为files_controller.rb以防止这两个问题。

嗯……这个例子有几个有趣的事情。 第一个是这个类名是调用File ,它已经在Ruby中定义了。

这很可能就是为什么当你在控制台中时没有得到未定义的类错误。 由于my_method没有在Ruby的File类上定义,所以这就是你看到未定义方法的原因。

现在回答你的问题。 我会先尝试将你的类命名为不同的东西,然后再从lib再次尝试。 我相信它应该在rails环境下再次默认加载。 对于一个或两个版本的function被取出但我想说它又回来了。如果没有,只需进入你的config/application.rb文件并查找config.autoload_paths行的声明。 在那里添加lib目录,你应该很高兴。

最后,您是否有理由想要lib的控制器?