【问题标题】:Rails: Can't access a module in my lib directoryRails:无法访问我的 lib 目录中的模块
【发布时间】:2013-08-25 21:46:59
【问题描述】:

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

现在,我正试图将一个模块放在我的 lib 目录中,我只是试图在 rails 控制台中访问该函数来测试它。我已经尝试了很多类似问题的技术,但我无法让它发挥作用。

在我的 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") 时,我收到一个无方法错误。当我尝试调用 Filenames.sanitize_filename("some string") 时,我得到一个未初始化的常量错误。当我尝试包含“/lib/filenames”时,会出现加载错误。

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

  2. 我怎样才能让它工作? :)

谢谢!

【问题讨论】:

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


【解决方案1】:

要获得非常棒的答案,请查看对您的问题的评论中引用的 Yehuda Katz 的回答(真的,一定要看看)。

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

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

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

但真的,请阅读耶胡达的回答。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 1970-01-01
  • 2021-03-10
相关资源
最近更新 更多