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