2012-05-17 52 views
2
@category = Category.where(:category_name => 'cricket') 
@category.class 

這裏的類@Category的是 「的ActiveRecord ::關係」 但是,Rails查詢對象類是不同的?

@category = Category.all(:conditions => { :category_name => 'cricket' }) 
@category.class 

在這種情況下,類@Category的是 「陣列」

兩個查詢的結果是一樣的,那麼這個班也是不同的。 爲什麼?

一件事... 在第一種情況下,我可以做@ category.title或@ category.body等 但是在第二種情況下,這是不可能的。 爲什麼?

+0

還要注意的是關係,至少在一個點上,就會謊稱自己是什麼類型的(IIRC)。 –

回答

2

在第一種情況下,你實際上是使用默認的範圍,並與where部分屬性吧。這意味着,當您要使用此關係的項目時,它將按需運行SQL查詢。想想看,喜歡它準備,但尚未運行查詢,在需要時將產生walues,並且可以進一步指定參數,例如可以追加另一個where子句,或什麼東西。當然,它比一個簡單的數組更聰明,因爲它的實現更復雜。

在第二種情況下,你立即從數據庫中獲取的所有記錄,所以結果是一個數組,其中包含的結果。與另一個相比,它非常愚蠢。