2013-10-05 65 views
0

試圖瞭解這種行爲對Rails 3:如果我這樣做爲什麼ActiveRecord查詢在一個對象數組上工作,而不是另一個?

@comments_1 = @article.comments

我可以運行的ActiveRecord類型的查詢上@ comments_1,如@comments_1.find(1),並得到一個記錄/回報對象。

=> #<Comment id: 1, body: "lorem ipsum ...">

然而,這樣的:

@comments_2 = Comment.all

不接受這樣的查詢。 @comments_2.find(1)返回:

=> [#<Comment id: 1, body: "lorem ipsum …">, … ]:find(1)]

(1)爲什麼這些不同的輸出? (2)如何讓@ comments_2數組的行爲方式與@ comments_1相同?

回答

2

Comment.all返回包含所有註釋的Array。而@article.comments返回Relation。 A Relation與數組有很多共同之處,但不是數組。

關於關係:http://api.rubyonrails.org/classes/ActiveRecord/Relation.html

+0

感謝spickermann和@mbratch - 我懷疑像這樣的事情正在發生,但是拋出我的是'@ comments_1.class'和'@ comments_2.class'都返回了「Array」。 我想我的問題的肉是:我怎樣才能從數據庫中獲取所有評論作爲一個對象,我可以運行AR查詢? – Michael

+0

只是'Comment.scoped'或只是'Comment'取決於你想要做什麼。 – spickermann

+0

謝謝! 'Comment.scoped'完成了這個訣竅。 – Michael

1

的查詢方法上ActiveRecord工作,Relation(從協會)等,所以當你做:

@article.comments 

的結果是一個對象(Relation),您可以使用wherefind等進行操作

但是,當您這樣做時:

Comment.all 

甚至這個

@article.comments.all 

您已經創建的對象的紅寶石Array。 ActiveRecord查詢方法不是Array類的一部分。

相關問題