1

我有一个文件,/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

知道怎么做吗?

4

3 回答 3

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对象的实例变量。

于 2012-05-17T21:14:58.097 回答
1

您尝试将my_method其作为类方法调用,但您已将其定义为实例方法。

您应该将其定义为def self.my_method,或创建控制器实例以将其作为实例方法调用。

此外,由于几个原因,您会遇到问题 - (1) Rails 期望控制器命名为FilesController,并且 (2)File是标准库中的一个类。我鼓励您将类名更改为FilesController,并将文件本身重命名为files_controller.rb以防止这两个问题。

于 2012-05-17T21:15:30.997 回答
0

嗯......这个例子有几件有趣的事情。首先是这个类名File是已经在 Ruby 中定义的 call 。

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

现在回答你的问题。我会尝试先给你的班级命名一些不同的名字,然后再试一次lib。我相信它应该在默认情况下再次使用 rails 环境加载。对于一个或两个版本,该功能已被删除,但我想说它又回来了。如果没有,只需进入您的config/application.rb文件并查找符合config.autoload_paths. 在那里添加lib目录,你应该很高兴。

最后,你想要一个控制器有什么原因lib吗?

于 2012-05-17T21:20:14.287 回答