Ruby on rails 在rails中使用lib目录中的class函数

Ruby on rails 在rails中使用lib目录中的class函数,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我正在创建一个rails3应用程序,我想创建一个处理字符串格式的类,所以我在lib目录中创建了一个名为FormatUtilites.rb的类,但每当我尝试在我的应用程序中的其他地方调用它时,我都会遇到以下错误: ActionView::Template::Error(未初始化的常量ActionView::CompiledTemplates::FormatUtilities) 所以它认为它是一个常量,而不是一个类方法,这就是它的定义方式。有什么想法吗 class FormatUtilities

我正在创建一个rails3应用程序,我想创建一个处理字符串格式的类,所以我在lib目录中创建了一个名为FormatUtilites.rb的类,但每当我尝试在我的应用程序中的其他地方调用它时,我都会遇到以下错误:

ActionView::Template::Error(未初始化的常量ActionView::CompiledTemplates::FormatUtilities)

所以它认为它是一个常量,而不是一个类方法,这就是它的定义方式。有什么想法吗

class FormatUtilities

  def self.slugify(name)
    name.downcase.gsub(/\s|\W|\D/, "")
  end

end

谢谢

类是Ruby中的常量,也是类。可能您只需要执行“require format\u utilities”

如果希望rails在引导时自动加载此文件,您需要将文件命名为format\u utilities.rb。下次重新启动服务器或控制台时,应该能够执行格式化实用程序。slugify(“name”)

显示rails3停止自动加载lib目录。我不知道他们为什么这么做,但他们做到了。只需要将其添加到application.rb中的自动加载

无论如何谢谢你

您需要添加:

# in config/application.rb
config.autoload_paths = %W(#{config.root}/lib
文件名应为format_utilities.rb,以便自动加载工作

在你的特殊情况下,我会使用不同的方法。我将在app/helpers/formatting_helper.rb中创建一个名为FormattingHelper的模块,而不是使用静态函数创建一个类,如下所示

class FormattingHelper
  def slugify(name)
    name.downcase.gsub(/\s|\W|\D/, "")
  end
end
然后在ApplcationController或特定控制器中,我将添加:

class ApplicationController < ActionController::Base
  helper :formatting
end
class ApplicationController
但是lib目录中的文件不应该自动加载吗?根据我的经验,它们似乎不应该自动加载。我不认为它停止了自动加载。只是名称约定规定,FormatUtilities类应该在名为format_utilities.rb的文件中定义,而不是在FormatUtilities.rb中定义