我有一个文件,/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
知道怎么做吗?
我有一个文件,/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
您可以使用语法声明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
是标准库中的一个类。我鼓励您将类名更改为FilesController
,并将文件本身重命名为files_controller.rb
以防止这两个问题。
嗯......这个例子有几件有趣的事情。首先是这个类名File
是已经在 Ruby 中定义的 call 。
这很可能是为什么当您在控制台中时没有收到未定义的类错误的原因。由于my_method
没有在 Ruby 的File
类上定义,这就是您看到未定义方法的原因。
现在回答你的问题。我会尝试先给你的班级命名一些不同的名字,然后再试一次lib
。我相信它应该在默认情况下再次使用 rails 环境加载。对于一个或两个版本,该功能已被删除,但我想说它又回来了。如果没有,只需进入您的config/application.rb
文件并查找符合config.autoload_paths
. 在那里添加lib
目录,你应该很高兴。
最后,你想要一个控制器有什么原因lib
吗?