2012-07-09 78 views
2

我想知道Rails数据库查询是否返回行(我不需要知道行内是什么,就像返回一行一样)。检查Rails数据库查询是否返回Nothing

我可以这样做:

academic_year = AcademicYear.find_by_raw_input(year) 

if academic_year 
... 
end 

但如果我输错,做一个find_all_by

academic_year = AcademicYear.find_all_by_raw_input(year) 

则返回一个空数组,这会导致if声明是真实的。

我知道,我应该小心,只是避免all调用,但是有没有rails-esque调用来查看返回结果是否来自任何查询(all或不是)nil

回答

4

如您所说,find_by_...将返回nil,find_all_by_...将返回[]。我想你要找的是.blank?

if !academic_year.blank? 
    #... 
end 

在控制台

> AcademicYear.find_by_raw_input(some_non_existent_year).blank? 
    => true 
> AcademicYear.find_all_by_raw_input(some_non_existent_year).blank? 
    => true 
+1

Ruby on Rails的扩展'Object'包括一些辅助方法。其中有'present?()',它完全返回'!blank?'。 '如果x.present?'比'if!x.blank?'更容易阅读。 [请参阅Ruby on Rails docs for Object](http://api.rubyonrails.org/classes/Object.html#method-i-present-3F) – 2012-07-09 22:38:28