Rails:无法访问lib目录中的模块

时间:2013-08-23 00:10:05

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

我想创建一个通用的字符串操作类,可以在我的Rails应用程序中的模型,视图和控制器中使用。

现在,我正在尝试将一个Module放在我的lib目录中,而我只是想在rails console中访问该函数来测试它。我从类似的问题中尝试了很多技巧,但我无法让它发挥作用。

在我的lib / filenames.rb文件中:

module Filenames

  def sanitize_filename(filename)
    # Replace any non-letter or non-number character with a space
    filename.gsub!(/[^A-Za-z0-9]+/, ' ')

    #remove spaces from beginning and end
    filename.strip!

    #replaces spaces with hyphens
    filename.gsub!(/\ +/, '-')
  end

  module_function :sanitize_filename

end

当我尝试调用sanitize_filename(“some string”)时,我得到一个no方法错误。当我尝试调用Filenames.sanitize_filename(“some string”)时,我得到一个未经过限制的常量错误。当我尝试包含'/ lib / filenames'时,我收到了加载错误。

  1. 这是创建我可以在任何地方访问的方法的最常规方法吗?我应该创建一个类吗?

  2. 我怎样才能让它发挥作用? :)

  3. 谢谢!

1 个答案:

答案 0 :(得分:11)

要获得一个非常好的答案,请查看Yehuda Katz在您的问题评论中引用的答案(实际上,请看一下)。

在这种情况下,简短的回答是您可能没有加载文件。请参阅RyanWilcox为您提供的链接。您可以通过在文件中添加语法错误来检查这一点 - 如果在启动应用程序(服务器或控制台)时未提出语法错误,则表示文件未加载。

如果您认为正在加载它,请发布您用来加载它的代码。再次,请参阅RyanWilcox为您提供的详细信息链接。它包含此代码,该代码将进入您的一个环境配置文件:

# Autoload lib/ folder including all subdirectories
config.autoload_paths += Dir["#{config.root}/lib/**/"]

但实际上,请阅读耶胡达的回答。