我正在创建一个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
谢谢!
答案 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")