2014-11-21 35 views
0

我認爲這可以做到平凡,但我無法這樣做。通過主鍵訪問哈希 - 紅寶石軌道

我當前的代碼是:

@player_types = squad.player_types 

現在我環路和查找的ID,

params[:player_types].each do |p_type| 
    @player_types.find(p_type[:id]) 
end 

爲什麼@player_types.find(p_type[:id])有,當我擡頭看服務器的日誌來執行的select查詢,沒有我加載了這個。這是否是因爲懶惰的評估,有沒有辦法在開始時加載所有內容並將其作爲哈希中的索引進行訪問?

+0

你是什麼意思加載在開始?那是什麼** eveything **? – 2014-11-22 06:26:55

+0

我認爲你的代碼需要更多的上下文。您應該描述您想要的結果集,此代碼所涉及的控制器操作以及params [:player_types]的數據類型。 – sealocal 2014-11-22 08:40:01

+0

爲什麼不直接查找'@ player_types'? 'player_types'是一個帶有PlayerType模型的表嗎? 'params [:player_types]是一個數組嗎? – sealocal 2014-11-22 08:44:32

回答

0

更好的方式來使用arel gem,並選擇具有特定IDS所有的記錄是這樣的:

ids = params[:player_types].map {|v| v[:id] } 
@player_types.where(@player_types.class.arel_table[:id].in(ids)) 
+0

什麼是arel_table? – Trancey 2014-11-24 18:05:28

+0

@Tanvi我已經更新了答案 – 2014-11-25 09:14:43

0

如果player_types是一個表,你可以直接在params[:player_types]陣列在選擇所有player_types的將數組傳遞給where條件。

@player_types = PlayerType.where(id: params[:player_types]) 
+0

你的意思是「用描述編輯你的問題」?你想讓我編輯OP的問題嗎? – sealocal 2014-11-22 19:22:53

+0

不,我的意思是*爲什麼*你的答案是回答OP的問題。我認爲現在沒問題。 – 2014-11-23 02:54:38