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

9

我希望创建一个通用的字符串操作类,可以在我的Rails应用程序中的Models、Views和Controllers中使用。

目前,我正在尝试将一个模块放入我的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.如何使它工作? :)
谢谢!

2
可能是OO Design in Rails: Where to put stuff的重复问题。 - user2062950
3
可能是 Best way to load module class from lib folder in Rails 3 的重复内容。请在Rails 3中从lib文件夹加载模块类的最佳方法。 - RyanWilcox
1个回答

13

对于一个真正优秀的答案,看看Yehuda Katz在你的问题评论中引用的答案(确实,请看一下)。

在这种情况下,简短的答案是您可能没有加载文件。请参见RyanWilcox给出的链接。您可以通过在文件中放置语法错误来检查此功能-如果在启动应用程序(服务器或控制台)时未引发语法错误,则知道未加载该文件。

如果您认为自己正在加载它,请发布您用于加载它的代码。再次查看RyanWilcox给出的链接以获取详细信息。其中包括进入其中一个环境配置文件的此代码:

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

但是真的,请阅读 Yehuda 的回答。


那个答案在哪里? - Steven Aguilar
@StevenAguilar - 它在 https://dev59.com/wXNA5IYBdhLWcg3wKacx - nachbar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接