【问题标题】:ruby-on-rails check if query result is empty (Model.find)ruby-on-rails 检查查询结果是否为空(Model.find)
【发布时间】:2012-12-09 18:18:48
【问题描述】:

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

这是查询:

@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

任何想法出了什么问题?

谢谢!!!

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      如果没有找到结果,find_by_name 返回一个 nil 对象,而不是一个空数组。要检查是否找到了客户,您可以使用 if @search.nil? 或简单地使用 if !@searchunless @search,因为在 ruby​​ 中 nil 是虚假的。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-01
        • 2013-07-24
        • 2014-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-19
        • 1970-01-01
        相关资源
        最近更新 更多