在Rails应用程序中扩展哈希类

时间:2017-05-04 16:17:22

标签: ruby-on-rails hash

我有一个rails应用程序,我需要扩展class Hash def delete_blank delete_if{|k, v| v.nil? or (v.instance_of?(Hash) and v.delete_blank.empty?)} end end 模块以添加方法 -

config/application.rb

我创建了一个名为hash_extensions.rb的文件并将其放在我的lib文件夹中,当然还配置了config.autoload_paths += %W(#{config.root}/lib)

中以下行的自动加载路径
undefined method `delete_blank' for #<Hash:0x000000081ceed8>\nDid you mean?  delete_if

但是当我在Hash上调用delete blank方法时,我得到以下错误 -

require "hash_extensions"

除此之外,我还尝试将<transform-results apply="snippet"/> 放在我调用delete_blank方法的文件的顶部。

我在这里做错了什么,或者我可以避免扩展Hash以获得相同的功能吗?

1 个答案:

答案 0 :(得分:3)

您可以通过几种不同的方式解决此问题:

  1. 假设hash_extensions.rb位于your_app/lib/extensions下。 (最好将所有扩展名存储在单独的文件夹中),要求config/application.rb中的所有扩展程序如下所示:

    Dir[File.join(Rails.root, "lib", "extensions", "*.rb")].each {|l| require l }
    
  2. hash_extensions.rb下移动config/initializers,它应自动加载。

  3. lib下创建一个名为extensionsyour_app/app的文件夹,然后将hash_extensions.rb移至该文件夹,Rails会负责加载它。