ruby-on-rails检查查询结果是否为空(Model.find)

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

这是查询:

@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 

任何想法出了什么问题?

谢谢!!!

使用它来检查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? 方法将对它起作用

如果未找到结果,则find_by_name返回nil对象,而不是空数组。 要检查是否找到了客户,您可以使用if @search.nil? 或者只是if !@search或者unless @search ,因为nil在ruby中是假的。

 @search = Customer.find_by_name($login_name) unless @search flash[:notice] = 'Username nicht bekannt' redirect_to :action => :login end