1
我有一個關係到一個朋友的模型(的has_many/belongs_to的)測試,如果在加盟的ActiveRecord查詢存在對象
連接後用戶模式,我想能夠檢查是否在存在一定朋友對象已加入用戶的朋友:
users = User.joins(:friends).where("some condition") # subset of total friends
fs = Friend.all
fs.each do |f|
if users.friends.includes?(f) # match!
...
else # no match
...
end
代碼原樣不起作用,我在代碼中獲取此功能時遇到困難。
我不想再次查詢數據庫。關鍵是要檢查已經加入的activerecord集合 – Jason
@Jason用你現在查詢的方式,你在這件事上沒有選擇。請記住,活動記錄關係是延遲加載的。意思是說,你的'用戶'或'u'對象還沒有填充「朋友」列表。只有當你嘗試使用關聯時,它們纔會被加載(導致另一個數據庫調用)。如果你檢查你的日誌,你會注意到一個初始的「用戶」查詢的查詢,然後當你嘗試用'friends集合做什麼時,你會看到另一個查詢。 [第1部分或第2部分] –
@Jason [2的第2部分]我猜你擔心再次觸摸數據庫的性能。如果你喜歡,我可以發佈一個替代品,但如果你願意的話,你不得不在Ruby中迭代一個數組,而不是讓數據庫優化發生。總之,假設你在這些列上有適當的索引,這種情況下的數據庫查找可能比線性數組搜索快得多。 –