2013-03-11 59 views
1

我們的導軌應用程序中有useruser_level模型。在user_level有一個叫做user_group_id的字段。關係是user has_many user_levels。我們想爲給定的user_id生成一個user_group_id(在user_level中)的數組。如何在ruby hash中爲特定鍵創建值數組?

對於給定的USER_ID,其user_levels可以檢索爲:

u = User.find(user_id) 
ul = u.user_levels 

可以有多個user_levels用於user。如何從ul與紅寶石map(或其他一些紅寶石方法(最好的紅寶石))創建一個user_group_id的數組?謝謝。

回答

1

你確實是在尋找map

user_group_ids = ul.map{|x| x.user_group_id} 

或用速記:

user_group_ids = ul.map(&:user_group_id) 

您可能還希望有隻不同的ID並沒有nil小號

user_group_ids = ul.map(&:user_group_id).uniq.compact 
4

試試這個,

user = User.find(user_id) 
user.user_levels.pluck(:user_group_id) 

或此,

user.user_levels.map(&:user_group_id) 

第一種方式是一個單獨的數據庫查詢只選擇:user_group_id。例如,在MySQL中,它會調用SELECT user_levels.user_group_id ...

第二個從提取的user_levels收集:user_group_id

相關問題