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

时间:2012-12-09 18:18:48

标签: ruby-on-rails database ruby-on-rails-3 activerecord

我在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

任何想法出了什么问题?

谢谢!!!

2 个答案:

答案 0 :(得分:26)

使用此选项检查nil和空案例:

@search.blank?

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

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

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

Customer.find_by_name($login_name)
如果没有这样的结果,

总是返回对象Customernil的一个结果,

等等:

Customer.where(:name=>$login_name)

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

答案 1 :(得分:1)

如果未找到任何结果,find_by_name将返回一个nil对象,而不是一个空数组。要检查是否找到了客户,您可以使用if @search.nil?或仅if !@searchunless @search,因为在红宝石中,nil是假的。

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