9

我正在使用 ruby​​ on rails 并尝试检查查询是否返回值。

这是查询:

@search = Customer.find_by_name($login_name)

如果查询找到结果,一切都很好,但是我如何对空结果做出反应?

我试过:

if @search.empty?
  flash[:notice] = 'Username nicht bekannt'
  redirect_to :action => :login
end

但我得到一个错误:

undefined method `empty?' for nil:NilClass

任何想法出了什么问题?

谢谢!!!

4

2 回答 2

30

使用它来检查 nil 和空案例:

@search.blank?

对于相反的情况(非零且非空),使用.present?

@search.present? #equivalent of !@search.blank?

您的查询返回nil 而不是的原因empty是:

Customer.find_by_name($login_name)

总是返回一个对象的结果,Customer或者nil如果没有这样的结果,

而像:

Customer.where(:name=>$login_name)

将始终返回您ActiveRecord::Relation(可以有 0-n 个结果)。和empty? 方法将适用于它

于 2012-12-09T18:21:46.563 回答
2

如果没有找到结果,则find_by_name返回一个 nil 对象,而不是一个空数组。要检查是否找到了客户,您可以使用if @search.nil?or 简单地if !@searchor unless @search,因为 nil 在 ruby​​ 中是虚假的。

@search = Customer.find_by_name($login_name)
unless @search
  flash[:notice] = 'Username nicht bekannt'
  redirect_to :action => :login
end
于 2012-12-12T16:35:28.907 回答