我将一些数据从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
如果元素不存在,如何正确忽略该元素?
答案 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 %>
附加说明:
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?