2012-12-09 69 views
5

我在rails上使用ruby并试图检查查询是否返回一个值。ruby​​-on-rails检查查询结果是否为空(Model.find)

这是查询:

@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 

任何想法出了什么问题?

谢谢!!!

回答

20

使用此检查零以及空箱:

@search.blank? 

对于相反的情况下(不是零和不为空),使用.present?

@search.present? #equivalent of [email protected]? 

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

Customer.find_by_name($login_name) 

always ret瓮对象Customer的一个结果,或者nil如果没有这样的结果,

而像这样:

Customer.where(:name=>$login_name) 

将返回ActiveRecord::Relation(可以有0-n个结果)始终。并且empty?方法将对其起作用

+0

太棒了!完美的作品!非常感谢你! – Tobi89

1

如果找不到结果,find_by_name将返回一个零对象,而不是一个空数组。要检查是否找到客户,可以使用if @search.nil?或简单地使用if [email protected]unless @search,因为nil在红宝石中是伪造的。

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