我在/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
知道怎么做?
答案 0 :(得分:4)
my_method
是File
类的实例方法。这意味着您只能在File
类的实例上调用它。
file = File.new
file.my_method
您可以使用my_method
语法将def self.my_method
声明为类方法。
class File < ApplicationController
def self.my_method
...
end
end
File.my_method
但是在类方法中,您不能使用File
对象的实例变量。
答案 1 :(得分:1)
您尝试将my_method
作为类方法调用,但您已将其定义为实例方法。
您应该将其定义为def self.my_method
,或者创建控制器的实例以将其称为实例方法。
此外,由于以下几个原因,您将遇到问题 - (1)Rails期望控制器的名称类似FilesController
,而(2)File
是标准中的类图书馆。我建议您将班级名称更改为FilesController
,并将文件本身重命名为files_controller.rb
以防止这两个问题。
答案 2 :(得分:0)
嗯......这个例子有几个有趣的事情。第一个是这个类名是调用File
,它已经在Ruby中定义了。
这很可能是因为当你在控制台中时,你没有得到未定义的类错误。由于my_method
未在Ruby的File
类中定义,因此您会看到未定义的方法。
现在回答你的问题。我会尝试先将您的课程命名为不同的,然后再从lib
再次尝试。我相信它应该在rails环境下再次默认加载。对于一个或两个版本的功能已被取出,但我想说它已经重新进入。如果没有,只需进入config/application.rb
文件并查找config.autoload_paths
行的声明。 。在那里添加lib
目录,你应该很高兴。
最后,您是否有理由想要lib
中的控制器?