簡體   English   中英

在活動記錄結果數組中查找

[英]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上實現的findselect ,如下所示:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM