将参数或 HashWithIndifferentAccess 中的值转换为可用的哈希值
Converting values in Parameters or a HashWithIndifferentAccess to a useable hash
当值包含哈希时,我无法找到一种方法来转换参数哈希或对哈希无差异访问的哈希。
我在转换时遇到问题:
hash_indif = {"1570"=>"{:enabled=>false}",
"1571"=>"{:enabled=>false}",
"1572"=>"{:enabled=>false}",
"1573"=>"{:enabled=>false}",
"1574"=>"{:enabled=>false}",
"1575"=>"{:enabled=>false}",
"1576"=>"{:enabled=>false}",
"1577"=>"{:enabled=>false}",
"1578"=>"{:enabled=>false}"}
为此:
hash_thing = {1570 => {:enabled => false},
1571 => {:enabled => false},
1572 => {:enabled => false},
1573 => {:enabled => false},
1574 => {:enabled => false},
1575 => {:enabled => false},
1576 => {:enabled => false},
1577 => {:enabled => false},
1578 => {:enabled => false}}
如果可能的话,我希望能够使用方法链。
附加信息
这种情况是由于尝试更新同一个键的多个属性造成的。
哈姆尔:
- @a_feature.each do |af|
.form-inline.radio-group
%label= af.feature.name
=radio_button "a_feature", af.id, [enabled: true], {checked: af.enabled, class:'form-control'}
%label Yes
=radio_button "a_feature", af.id, [enabled: false], {checked: !af.enabled, class:'form-control'}
%label No
参数:
{"utf8"=>"✓",
"_method"=>"patch",
"a_feature"=>{
"296"=>"{:enabled=>true}",
"344"=>"{:enabled=>false}",
"376"=>"{:enabled=>false}",
"commit"=>"Save",
"agency_id"=>"7"}
这是一个不使用 eval 的快速解决方法
def to_bool(str)
str == 'true'
end
new_hash = Hash.new
hash_indif.each do |i, j|
inner_hash = Hash.new
match_data = /^{:(enabled)=>(false|true)}$/.match(j)
inner_hash[match_data[1].intern] = to_bool match_data[2]
new_hash[i.to_i] = inner_hash
end
new_hash变量包含你需要的输出-
{1570=>{:enabled=>false}, 1571=>{:enabled=>false}, 1572=>{:enabled=>false}, 1573=>{:enabled=>false}, 1574=>{:enabled=>false}, 1575=>{:enabled=>false}, 1576=>{:enabled=>false}, 1577=>{:enabled=>false}, 1578=>{:enabled=>false}}
当值包含哈希时,我无法找到一种方法来转换参数哈希或对哈希无差异访问的哈希。
我在转换时遇到问题:
hash_indif = {"1570"=>"{:enabled=>false}",
"1571"=>"{:enabled=>false}",
"1572"=>"{:enabled=>false}",
"1573"=>"{:enabled=>false}",
"1574"=>"{:enabled=>false}",
"1575"=>"{:enabled=>false}",
"1576"=>"{:enabled=>false}",
"1577"=>"{:enabled=>false}",
"1578"=>"{:enabled=>false}"}
为此:
hash_thing = {1570 => {:enabled => false},
1571 => {:enabled => false},
1572 => {:enabled => false},
1573 => {:enabled => false},
1574 => {:enabled => false},
1575 => {:enabled => false},
1576 => {:enabled => false},
1577 => {:enabled => false},
1578 => {:enabled => false}}
如果可能的话,我希望能够使用方法链。
附加信息
这种情况是由于尝试更新同一个键的多个属性造成的。
哈姆尔:
- @a_feature.each do |af|
.form-inline.radio-group
%label= af.feature.name
=radio_button "a_feature", af.id, [enabled: true], {checked: af.enabled, class:'form-control'}
%label Yes
=radio_button "a_feature", af.id, [enabled: false], {checked: !af.enabled, class:'form-control'}
%label No
参数:
{"utf8"=>"✓",
"_method"=>"patch",
"a_feature"=>{
"296"=>"{:enabled=>true}",
"344"=>"{:enabled=>false}",
"376"=>"{:enabled=>false}",
"commit"=>"Save",
"agency_id"=>"7"}
这是一个不使用 eval 的快速解决方法
def to_bool(str)
str == 'true'
end
new_hash = Hash.new
hash_indif.each do |i, j|
inner_hash = Hash.new
match_data = /^{:(enabled)=>(false|true)}$/.match(j)
inner_hash[match_data[1].intern] = to_bool match_data[2]
new_hash[i.to_i] = inner_hash
end
new_hash变量包含你需要的输出-
{1570=>{:enabled=>false}, 1571=>{:enabled=>false}, 1572=>{:enabled=>false}, 1573=>{:enabled=>false}, 1574=>{:enabled=>false}, 1575=>{:enabled=>false}, 1576=>{:enabled=>false}, 1577=>{:enabled=>false}, 1578=>{:enabled=>false}}