Car*_*ham 1 ruby ruby-on-rails
我创建了一个使用方法lib/ext/date.rb扩展Date类的文件.
class Date
def self.next_ weekday_string
// code here
end
end
Run Code Online (Sandbox Code Playgroud)
在我的application.rb文件中,我自动加载此ext文件夹中的所有内容
config.autoload_paths << "#{Rails.root}/lib/ext"
Run Code Online (Sandbox Code Playgroud)
但我一直在收到错误 undefined method next_ for Date:Class
从控制台内调用此方法可以正常工作
load 'lib/ext/date.rb'; Date.next_ 'wednesday'
=> Wed, 07 Oct 2015
Run Code Online (Sandbox Code Playgroud)
是的,在尝试使用此扩展方法之前,服务器已重新启动.
我想,你对Rails自动加载机制的理解是模糊的.
autoload_pathsrails尝试解析未定义的常量时使用.比如,您User是第一次访问a .没有加载这样的类,因此rails将查看其自动加载路径并尝试在User那里找到.
你的情况不同.Date肯定存在(因为它是一个系统类).因此rails没有理由访问自动加载路径中的文件.
明确加载文件.例如,在初始化程序中
# 00_monkey_patching.rb
Dir["#{Rails.root}/lib/monkey_patching/*.rb"].each do |file|
require file
end
Run Code Online (Sandbox Code Playgroud)