我们知道Array和Hash的#[]方法在索引(键)不存在时返回nil,但有时程序需要必须存在,如果再判断是否为nil就有些傻了(还有的值就是nil的就没法取分);还有就是如果没有这个键/索引时,我们要另取值的情况(同样有nil的问题)
对待这种情形我们可以使用fetch方法
eg:
{s:1,b:2}.fetch(:c) #报错
{s:1,b:2}.fetch(:c,5) #取不到拿默认值
{s:1,b:2,d:nil}.fetch(:d,5) #是 nil
Array的同理就不再举例了
实例,价格网奖金计算配置的保存到数据库的是hash to_json,在页面显示时是这么控制的:
= text_field_tag "ri_perform[#{k}][]",@ri_perform.blank? || @ri_perform[k.to_s].blank? ? '' : @ri_perform[k.to_s][0],:style => "width:40px;"
使用fetch优化
= text_field_tag "ri_perform[#{k}][]",@ri_perform.blank? ? '' : @ri_perform.fetch(k.to_s,[])[0],:style => "width:40px;"
网友评论