2012-05-17 37 views
1

我有一个/lib下的文件及其自己的方法。如何在Ruby中调用外部类的方法

# 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 

不知道如何到达的方法?

回答

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

您试图拨打my_method作为类方法,但是您已将其定义为实例方法。

您应该将其定义为def self.my_method,或者创建控制器的实例以将其称为实例方法。 (1)Rails期望控制器被命名为FilesController,(2)File是标准库中的一个类。我鼓励你将类名更改为FilesController,并将文件本身重命名为files_controller.rb以防止这两个问题。

0

那么......这个例子有几个有趣的事情发生。第一个是这个类的名字叫做File,这已经在Ruby中定义了。

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

现在你的问题。我会尝试给你的班级命名一些不同的东西,并从lib再次尝试。我相信它应该在rails环境中默认加载。对于一个或两个功能被取出,但我想说它回来了。如果不是,只需进入您的config/application.rb文件并寻找沿config.autoload_paths行宣言。在那里添加lib目录,你应该很好去。

最后,有没有你想要一个控制器在lib的原因?