2014-11-21 2 views
0

나는 이것이 사소한 일일 수 있다고 생각했지만 그렇게 할 수 없다.기본 키 - 루비 레일에 의한 해시 액세스

내 현재 코드는 다음과 같습니다

@player_types = squad.player_types 

지금 아이디에 대한 루프 및 조회,

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

이유는 무엇입니까 @player_types.find(p_type[:id]) 내가 서버 로그를 보면하여 select 쿼리를 실행해야합니다, 나는 이것을 적재했다. 그것은 게으른 평가 때문이며 시작시 모든 것을로드하고 해시의 인덱스로 액세스하는 방법이 있습니까? player_types 테이블이

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

시작시에 everithing을로드하는 것을 의미합니까? 그게 뭐지? ** 무슨 일이야? –

+0

나는 당신의 코드가 더 많은 문맥을 필요로한다고 생각한다. 원하는 결과 세트,이 코드와 관련된 컨트롤러 조치 및 params [: player_types]의 데이터 유형을 설명해야합니다. – sealocal

+0

왜 '@ player_types'를 직접 찾아 보지 않으시겠습니까? 'player_types'는 PlayerType' 모델을 가진 테이블입니까? 'params [: player_types]'는 배열입니까? – sealocal

답변

0

arel gem을 사용하고, 특정 IDS 모든 기록을 선택할 수있는 더 좋은 방법이있다 배열을 where 조건으로 전달합니다.

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

무엇이 arel_table입니까? – Trancey

+0

@ Tanvi 답변을 업데이트했습니다 –

0

경우, 직접 params[:player_types] 배열로의 player_types을 모두 선택할 수 있습니다

+0

"설명과 함께 질문 편집"이란 무엇을 의미합니까? 내가 OP의 질문을 편집하길 원하니? – sealocal

+0

아니요, 저는 * 왜 * 당신의 대답이 OP의 질문에 답하는 것을 의미합니까? 나는 이제 괜찮다고 생각한다. –