fetch方法

我们知道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;"

推荐阅读更多精彩内容