response
是一个哈希,看起来像两件事之一:
response = {'demo' => 'nil', 'test_01' => 'Demo Data'}
或
response = {'test' => 'Demo Data', 'demo' => 'nil'}
我想做这样的事情:
if response.has_key? 'test_01'
new_response.update(:nps_score => response['test_01']
else
new_response.update(:nps_score => response['test']
end
对此有更多的“Ruby”方法吗?也许是使用||的东西运营商?我使用的是ruby 2.0.0和rails 4.0.0。
答案 0 :(得分:11)
这就是Hash #fetch
方法的用途。
new_response.update(nps_score: response.fetch('test_01', response['test']))
答案 1 :(得分:2)
new_response.update(:nps_score => response['test_01'] || response['test'])
这将有效,除非false
或nil
是您可能期望的有效值。如果是这种情况,您可以使用三元组。
new_response.update(:nps_score => response.has_key?('test_01') ? response['test_01'] : response['test'])
答案 2 :(得分:0)
另一种方法是在构造时将哈希中的行为灌输。
response = Hash.new do |h, key|
h['test'] if key == 'test_01'
end.update( 'test' => 'Demo Data', 'demo' => 'nil' )
response['test_01']
#=> 'Demo Data'