2017-03-23 2 views
0

私はハッシュオブジェクト(クラス名のハッシュを)持ってマージすることはできません:はactivesupportの持つハッシュオブジェクト:: 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} 
} 

をそして私はの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"} 
} 

誰もが、私はこれらの2つのオブジェクトをマージすることができます方法を知っていますか?

答えて

2

問題がh1では、記号キーを持っており、h2は、文字列キー

h1

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"} 
} 

HashWithIndifferentAccessとして、あなたはハッシュを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} 
} 
1

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}} 
、これを試してみてください
関連する問題