我在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
任何想法出了什么问题?
谢谢!!!
答案 0 :(得分:26)
使用此选项检查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?
方法将对其起作用
答案 1 :(得分:1)
如果未找到任何结果,find_by_name
将返回一个nil对象,而不是一个空数组。要检查是否找到了客户,您可以使用if @search.nil?
或仅if !@search
或unless @search
,因为在红宝石中,nil是假的。
@search = Customer.find_by_name($login_name)
unless @search
flash[:notice] = 'Username nicht bekannt'
redirect_to :action => :login
end