如何在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_method
是File
类的实例方法。 这意味着您只能在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
的控制器?