处理ruby哈希中的空元素

时间:2014-05-08 17:55:01

标签: ruby-on-rails ruby

我将一些数据从Web服务返回到rails页面。然而,有时存在一个元素,有时它不存在。这似乎可以处理videos元素不存在时的情况,但它会引发错误:

<% if @data['videos'].present? && !@data['videos'].empty? %>
    <div class="tab-pane map" id="video"></div>
<% end %>

这是错误:

undefined method `empty?' for nil:NilClass

如果元素不存在,如何正确忽略该元素?

2 个答案:

答案 0 :(得分:2)

您应该使用.present?代替.empty?

1.9.3p489 :003 > ''.present?
 => false 
1.9.3p489 :004 > ''.empty?
 => true 
1.9.3p489 :005 > nil.present?
 => false 
1.9.3p489 :006 > nil.empty?
NoMethodError: undefined method `empty?' for nil:NilClass

在您的情况下:

<% if @data['videos'].present? %>
    <div class="tab-pane map" id="video"></div>
<% end %>

附加说明:

.blank?.present?完全相反:

class Object

  def blank?
    respond_to?(:empty?) ? empty? : !self
  end

  def present?
    !blank?
  end

另一个注意事项:

方法.presence非常有用(如果对象true响应.present?,则会返回该对象):

1.9.3p489 :008 > params = { name: '' }
 => {:name=>""} 
1.9.3p489 :009 > user_name = params[:username].presence || 'DefaultName'
 => "DefaultName" 

答案 1 :(得分:0)

从代码

中使用的条件中删除以下部分
&& !@data['videos'].empty?