在rails中使用lib目录中的类函数

时间:2010-10-28 00:57:04

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

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

ActionView::Template::Error (uninitialized constant ActionView::CompiledTemplates::FormatUtilities)

因此它认为它是一个常量而不是类方法,它是如何定义的。有什么想法吗?

class FormatUtilities

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

end

谢谢!

4 个答案:

答案 0 :(得分:4)

结果rails3停止自动加载lib目录。我不知道为什么他们这样做,但他们做到了。只需将它添加到application.rb

中的自动加载

非常感谢!

答案 1 :(得分:1)

类是Ruby中的常量,除了也是类。可能你只需要做“require format_utilities”

答案 2 :(得分:1)

您需要添加:

# 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

答案 3 :(得分:0)

如果您希望rails在引导时自动加载此文件,则需要将文件命名为format_utilities.rb。下次重新启动服务器或控制台时,您应该可以执行FormatUtilities.slugify("name")