我有一个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以获得相同的功能吗?
答案 0 :(得分:3)
您可以通过几种不同的方式解决此问题:
假设hash_extensions.rb
位于your_app/lib/extensions
下。 (最好将所有扩展名存储在单独的文件夹中),要求config/application.rb
中的所有扩展程序如下所示:
Dir[File.join(Rails.root, "lib", "extensions", "*.rb")].each {|l| require l }
在hash_extensions.rb
下移动config/initializers
,它应自动加载。
lib
下创建一个名为extensions
或your_app/app
的文件夹,然后将hash_extensions.rb
移至该文件夹,Rails会负责加载它。