【问题标题】:Cannot merge Hash object with ActiveSupport::HashWithIndifferentAccess无法将 Hash 对象与 ActiveSupport::HashWithIndifferentAccess 合并
【发布时间】:2017-03-23 14:59:22
【问题描述】:

我有一个哈希对象(类名Hash):

h1 = {
 :hot_products=>{:enabled=>true, :always_enable=>false, :order=>0},
 :recent_products=>{:enabled=>true, :always_enable=>true, :order=>1},
 :event_promotion=>{:enabled=>true, :always_enable=>false, :order=>2}
}

我有一个 params 对象(类名 ActiveSupport::HashWithIndifferentAccess)

h2 = { 
 "hot_products"=>{"enabled"=>"1"},
 "recent_products"=>{"enabled"=>"0"},
 "event_promotion"=>{"enabled"=>"1"}
}

我想使用 deep_merge 合并这些对象

h1.deep_merge(h2)

然后我得到:

{
 :hot_products=>{:enabled=>true, :always_enable=>false, :order=>0},
 :recent_products=>{:enabled=>true, :always_enable=>true, :order=>1},
 :event_promotion=>{:enabled=>true, :always_enable=>false, :order=>2},
 "hot_products"=>{"enabled"=>"1"},
 "recent_products"=>{"enabled"=>"0"},
 "event_promotion"=>{"enabled"=>"1"}
}

有谁知道如何合并这两个对象?

【问题讨论】:

    标签: ruby-on-rails ruby hash


    【解决方案1】:

    问题是h1 有符号键,h2 有字符串键

    h1 设为HashWithIndifferentAccess

    h1 = {
     :hot_products=>{:enabled=>true, :always_enable=>false, :order=>0},
     :recent_products=>{:enabled=>true, :always_enable=>true, :order=>1},
     :event_promotion=>{:enabled=>true, :always_enable=>false, :order=>2}
    }.with_indifferent_access
    

    h2 = { 
     "hot_products"=>{"enabled"=>"1"},
     "recent_products"=>{"enabled"=>"0"},
     "event_promotion"=>{"enabled"=>"1"}
    }
    

    现在,您可以deep_merge 哈希,它会返回正确的结果

    h1.deep_merge(h2)
    
    {
     "hot_products"=>{"enabled"=>"1", "always_enable"=>false, "order"=>0},
     "recent_products"=>{"enabled"=>"0", "always_enable"=>true, "order"=>1}, 
     "event_promotion"=>{"enabled"=>"1", "always_enable"=>false, "order"=>2}
    }
    

    【讨论】:

      【解决方案2】:

      试试这个,

      h1=ActiveSupport::HashWithIndifferentAccess.new(h1)
      h1.deep_merge(h2)
      => {"hot_products"=>{"enabled"=>"1", "always_enable"=>false, "order"=>0}, "recent_products"=>{"enabled"=>"0", "always_enable"=>true, "order"=>1}, "event_promotion"=>{"enabled"=>"1", "always_enable"=>false, "order"=>2}} 
      

      【讨论】:

        猜你喜欢
        • 2015-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多