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

时间:2016-05-12 07:23:49

标签: ruby-on-rails ruby-on-rails-2

我想扩展ruby类,例如,

# 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 )

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

  

注意: - Rails版本是2.3.4

我花了很多时间在这上面但没有运气。任何帮助表示赞赏。

提前致谢!

1 个答案:

答案 0 :(得分:2)

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

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