Mic*_*tor 3 hash ruby-on-rails
我有一个 Rails 应用程序,我需要扩展模块Hash以添加方法 -
class Hash
def delete_blank
delete_if{|k, v| v.nil? or (v.instance_of?(Hash) and v.delete_blank.empty?)}
end
end
Run Code Online (Sandbox Code Playgroud)
我创建了一个名为 hash_extensions.rb 的文件,并将其放置在我的 lib 文件夹中,当然还使用以下行配置了自动加载路径config/application.rb
config.autoload_paths += %W(#{config.root}/lib)
Run Code Online (Sandbox Code Playgroud)
然而,当我在哈希上调用删除空白方法时,出现以下错误 -
undefined method `delete_blank' for #<Hash:0x000000081ceed8>\nDid you mean? delete_if
Run Code Online (Sandbox Code Playgroud)
除此之外,我还尝试将其放置require "hash_extensions"在我从中调用delete_blank方法的文件顶部。
我在这里做错了什么或者我可以避免扩展哈希以具有相同的功能吗?
您可以通过几种不同的方式解决此问题:
假设hash_extensions.rb位于your_app/lib/extensions. (最好将所有扩展存储在单独的文件夹中),要求所有扩展如下config/application.rb:
Dir[File.join(Rails.root, "lib", "extensions", "*.rb")].each {|l| require l }
Run Code Online (Sandbox Code Playgroud)移到hash_extensions.rb下面config/initializers,它应该会自动加载。
lib或extensionsunder)your_app/app并移至hash_extensions.rb该文件夹,Rails 将负责加载它。