2011-11-07 65 views
1

在下面的查詢我得到的對象作爲返回值(並因此檢查使用.nil沒有結果工作得很好:ActiveRecord ::關係問題檢查是否爲零? - Rails的3.1

store = Store.where(:some_id => myobj.some_id.to_i).first 
    unless store.nil? 

但在這接下來的代碼中,我得到的返回類型? ActiveRecord的::關係,並檢查使用.nil?失敗!

existing_store = Store.where(:some_str => myobj.some_str).not_hidden().active() 
if existing_store.nil? 

1.這是爲什麼?

2.在這種情況下,我該如何檢查結果?

3.我怎麼能檢查是否有記錄,使用find()或者()

的Rails 3.1確實令這混亂的時候一般返回。

+0

'not_hidden'和'active'的範圍我認爲不是問題的行爲?而調用'#nil?'究竟返回的是什麼? – tbuehlmann

+0

是的,那些是範圍......並調用.nil?總是爲false,因爲返回值是一個空數組(因此從不nil) – Hopstream

+0

正如下面已經建議的那樣,我會使用'#empty?'。 – tbuehlmann

回答

7

使用blank?nil?是真實的,如果它真的nil(的NilClass單一實例),但你的第二個例子總是會返回一個數組,可能爲空,如果沒有結果,但是陣列不過。 blank?檢查空數組,空字符串,nil和false值。

如果你有blank?預期可以檢查first.nil?

+0

經過廣泛的測試後,'blank?'和'present'是相反的'原來是測試活動記錄返回值的最佳選項。 – Hopstream

3

因爲在第一種情況下,您嘗試檢查secound中的實例,得到Array,並且數組不是nil,它的Array即使其爲空。你應該使用empty?來檢查這個!

+0

但我得到一個數組,即使我做.first()在第二個查詢。 – Hopstream

+0

真的,當您嘗試使用Store.where(:some_str => myobj.some_str).first.class'時會返回什麼? – davidb

+0

ActiveRecord :: Relation - 我正在使用rails 3.1 – Hopstream