[英]Finding in array of active record results
我正在使用活動記錄來創建數組。
users = User.all.to_a
現在我想稍后在這個數組中查找用戶 ID:1
users.find(1)
但它沒有給出結果,而是返回所有內容。 如何在此結果數組中搜索我選擇的用戶 ID。 我可以看到用戶是一個array
,但在數組中包含User
object 的每條記錄。
如果我遵循
user.first
它返回用戶 object,但我想搜索,我該怎么做。 我知道如果我刪除to_a
那么它將起作用,但隨后它將創建另一個 sql 查詢。
由於它是一個對象數組,因此您應該使用find
與塊:
users.find { |user| user.id == 1 }
User.find(1)
是一個ActiveRecord::FinderMethod
。 但是,當您已經將所有記錄加載到 memory 中時,這些記錄將轉換為User
的實例並存儲在數組中。 因此,您需要使用在Array
上實現的find
或select
,如下所示:
users.find { |user| user.id == 1 } #=> returns the first found record
users.select { |user| user.id == 1 } #=> returns an array with all found record
請記住,正確設置后,數據庫查詢能夠使用有效的索引。 這使得數據庫查詢非常快。 當您將所有記錄加載到 memory 中時,需要將這些記錄轉換為適當的實例。 並且在數組上搜索不能使用任何索引,這意味着它可能(取決於數組的大小)比新的數據庫查詢慢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.