Rails扩展Date类

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)

是的,在尝试使用此扩展方法之前,服务器已重新启动.

Ser*_*sev 5

我想,你对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)