2012-08-23 116 views
0

用戶的has_many項目 項目belongs_to的客戶軌,Mongoid和複雜查詢

使用mongoid(我不認爲這是mongoid具體的,但無論如何)我需要給用戶收集的所有客戶端。目前我使用:

@clients = current_user.items.map{|c| c.client} 

但肯定它不好,不可接受。什麼是實施的最佳方式?

+1

這並不可怕或什麼。但是如果你通過一些僞代碼來描述你希望你的最終語法是什麼,那麼這可能是最好的選擇。基本上,這聽起來像你想要將一些語法糖應用到你的代碼,並有更清晰的代碼,可能是這樣的:clients = user.all_clients – RadBrad

+0

首先,因爲結果是有一個數組,它不是很方便。其次,我不確定,但是我認爲擁有大量的記錄並不適合把它放在紅寶石的肩膀上? (再次,它是mongodb) –

+0

明白了,我認爲你有幾個選擇,要麼手工製作一個你想要的SQL語句,要麼使用ActiveRecord包含(Eager loading)。兩者之間的決定可能是特定於應用程序的。 [鏈接](http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html)查看關於Eager Loading – RadBrad

回答

2

爲了不碰到N + 1問題,我會做這樣的事情。

# first you retrieve all client ids 
ids = current_user.items.map(&:client_id) 

# then you retrieve all clients at once 
@clients = Client.in(id: ids)