Ruby - 为什么这个结构返回nil?

时间:2013-01-03 14:16:52

标签: ruby-on-rails ruby heroku null string

我有这个简单的结构:

<% if !@user.address.empty? && !@user.zip.empty? %>
   <%= @user.address+', '+@user.zip%>
<% end %>

如果填写了addresszip,那就没问题了。但如果没有,在localhost上不会打印出中间行。那也没关系。

但是在Heroku上,如果未填写addresszip,我会收到错误

ActionView::Template::Error (undefined method `empty?' for nil:NilClass):

怎么可能? 注意:addresszip的数据类型为varchar(255)

编辑:我忘记添加重要提示:@user nil

3 个答案:

答案 0 :(得分:5)

尝试使用present?

表面present?只是!blank?,它会测试空字符串以及nil{}[]

在你的情况下:

<% if @user.address.present? && @user.zip.present? %>
  <%= "#@user.address, #@user.zip" %>
<% end %>

答案 1 :(得分:3)

您只能在empty?[]{},“”使用"",但不能nil上使用{/ 1}}。

改为使用blank?

!@user.address.blank? && !@user.zip.blank?

为了肯定使用present?

@user.address.present? && @user.zip.present?

答案 2 :(得分:1)

可能在本地数据库中,这些值不是null,而是实际的空字符串。但是在Heroku中,当您检索没有地址的值时,您将获得空值。

如果您使用的是Rails,那么您也可以使用blank?来检查nil。

注意blank?present?active support.的一部分