我有这个简单的结构:
<% if !@user.address.empty? && !@user.zip.empty? %>
<%= @user.address+', '+@user.zip%>
<% end %>
如果填写了address
和zip
,那就没问题了。但如果没有,在localhost上不会打印出中间行。那也没关系。
但是在Heroku上,如果未填写address
和zip
,我会收到错误
ActionView::Template::Error (undefined method `empty?' for nil:NilClass):
怎么可能?
注意:address
和zip
的数据类型为varchar(255)
。
编辑:我忘记添加重要提示:@user
nil
。
答案 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.的一部分