2

我有这个简单的结构:

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

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

但是在 Heroku 上,如果address没有zip填写,我会收到错误

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

这怎么可能?注意:address并且zip有 datatype varchar(255)

编辑:我忘了添加一个重要说明:@userNEVER nil

4

3 回答 3

5

尝试使用present?

表面之下present?就是它将测试 空!blank?字符串以及 fornil和。{}[]

在你的情况下:

<% if @user.address.present? && @user.zip.present? %>
  <%= "#@user.address, #@user.zip" %>
<% end %>
于 2013-01-03T14:24:41.330 回答
3

您只能使用empty?on [], {}, "", "" 但不能使用 on nil

改用blank?

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

使其肯定使用present?

@user.address.present? && @user.zip.present?
于 2013-01-03T14:20:06.527 回答
1

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

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

只是要注意blank?并且present?积极支持的一部分。

于 2013-01-03T14:22:59.270 回答