2012-07-09 77 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