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

时间:2012-05-17 21:12:25

标签: ruby-on-rails ruby ruby-on-rails-3

我在/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

知道怎么做?

3 个答案:

答案 0 :(得分:4)

my_methodFile类的实例方法。这意味着您只能在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中的控制器?