【发布时间】:2016-06-08 08:54:06
【问题描述】:
我在 Hash 上有一个方法1,它删除值为空的键值对。它也递归地对嵌套哈希执行此操作。
class Hash
def delete_blank
delete_if { |k, v| v.empty? || v.instance_of?(Hash) && v.delete_blank.empty? }
end
end
从控制台运行它可以:
{
"customer_id"=>"foo",
"document_id"=>"",
"status"=>"",
"total"=>{"from"=>"1", "to"=>""}
}.delete_blank
#=> {"customer_id"=>"foo", "total"=>{"from"=>"1"}}
{
"customer_id"=>"",
"document_id"=>"",
"status"=>"",
"total"=>{"from"=>"", "to"=>""}
}.delete_blank
#=> {}
我将上面的代码放在我的Rails 项目中lib/core_ext/hash.rb,然后需要该文件。我正在尝试在模型关注中使用它。但是,它不会删除嵌套哈希中的空白对:
{
"customer_id"=>"",
"document_id"=>"",
"status"=>"",
"total"=>{"from"=>"", "to"=>""}
}.delete_blank
#=> {"total"=>{"from"=>"", "to"=>""}}
为什么该方法的递归部分在应用程序中不能按预期工作(而它在 rails c 中工作)?
【问题讨论】:
标签: ruby-on-rails ruby