Rails应用程序不会从lib目录加载文件

时间:2016-03-08 17:41:06

标签: ruby-on-rails

我在Rails应用程序中对类to_bool使用名为String的mixin方法:

class String
  def to_bool
    return true if self == true || self =~ (/(true|t|yes|y|1|byapplication)$/i)
    return false if self == false || self.blank? || self =~ (/(false|f|no|n|0|disabled)$/i)
    raise ArgumentError.new("invalid value for Boolean: \"#{self}\"")
  end
end

我只是把它放在一个名为<app_root>/lib/string.rb的文件中。在一个应用程序中正常工作。

在我正在处理的新应用程序中,它拒绝工作。如果我先load它,我可以让它在控制台中工作,但它绝对不会自己加载。它位于lib目录中!我在application.rb

中有这个
# Custom directories with classes and modules you want to be autoloadable.
config.autoload_paths += %W(
  #{config.root}/lib
  #{config.root}/app/workers
  #{config.root}/app/inputs
  #{config.root}/lib/mixins
  #{config.root}/lib/classes
  #{config.root}/lib/database
  #{config.root}/app/api
  #{config.root}/app/datatables)

它位于顶部。无论我做什么,我都会在控制台中得到NoMethodError,直到我:

load 'string.rb'

我忽略了什么简单的事情?

1 个答案:

答案 0 :(得分:2)

autoload的工作方式是,如果尚未定义常量 ,则检查autoload_paths是否存在与该常量匹配的文件,如果存在,则加载该文件。

String(显然:)已经存在,因此永远不会触发lib/string.rb的自动加载。

你应该把它放进config/initializers/core_ext.rb或类似的东西。