无法覆盖 Rails 2.3.4 中的核心 ruby class

Cannot override core ruby class in Rails 2.3.4

我想扩展 ruby class,例如,

# lib/core_ext/hash.rb

class Hash
  def gop_compact
    delete_if{|k, v| (k.blank? || v.blank?)}
  end
end

我在/lib目录下单独创建了一个文件夹如下,

lib/core_ext/hash.rb

并且我尝试将此路径包含在 load_paths 中,如下所示,

# config/environment.rb
config.load_paths += %W( #{RAILS_ROOT}/lib/core_ext )

完成所有这些设置后,重新启动服务器并尝试在哈希对象上调用方法,但它抛出未定义的方法异常。

Note:- Rails version is 2.3.4

我在这上面花了很多时间,但还没有运气。感谢任何帮助。

提前致谢!

即使您已将 core_ext 文件夹添加到您的加载路径,您仍然需要使用 require 'hash' 来要求它。为了最大限度地减少内存使用,Rails 实际上不需要 ruby 文件只是因为您将它们添加到 load_path.

>> Hash.instance_methods.grep(/gop/)
=> []
>> require "hash"
=> true
>> Hash.instance_methods.grep(/gop/)
=> [:gop_compact]