我在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'
我忽略了什么简单的事情?
答案 0 :(得分:2)
autoload的工作方式是,如果尚未定义常量 ,则检查autoload_paths是否存在与该常量匹配的文件,如果存在,则加载该文件。
String
(显然:)已经存在,因此永远不会触发lib/string.rb
的自动加载。
你应该把它放进config/initializers/core_ext.rb
或类似的东西。