2014-03-13 2 views
1

저는 레일즈 3.2를 사용하고 있습니다. 다른 레일스에서 ​​오는 매개 변수를 기반으로 객체를 만드는 "레일 방식"을 알고 싶습니다. 나는 StoredItem 클래스와 RequestedItem 클래스를 가지고 있지만, 관련이 없다. 요청 된 아이템에 참석하는 과정에서 요청 된 부품 번호로부터 저장된 모든 itens와 qty를 나열하고 싶다. 나는 분명히다른 것의 매개 변수를 기반으로 객체 만들기

@requested_items = RequestedItem.includes(:item_description).where("item_request_id = ?", params[:id]) 

@stored_items = StoredItem.where("item_description_id = ?",@requested_items.item_description_id) 

내가뿐만 아니라 하나를 비교 설명 아이디를 많이 가지고 있기 때문에이 작동하지 않는 것 같습니다 같은 생각, 그래서 뭐죠 최고의 올바른 방법이 작동되도록하려면?

어떤 도움을 이해할 수있을 것이다

,

답변

3
@stored_items = StoredItem.where("item_description_id IN (?)",@requested_items.map(&:item_description_id)) 

또는

@stored_items = StoredItem.where(:item_description_id => @requested_items.map(&:item_description_id)) 
+2

두 번째 옵션은 레일 다음, SQL 생성을 처리 할 수 ​​있습니다 작성 훨씬 더 (더 순수 SQL 없다 당신을 :) 감사합니다 DB 어댑터). 또한,'@ requested_items.pluck (: item_description_id)'는'.map (& : item_description_id)'보다 약간 더 효율적일 것입니다. – MrYoshiji

+0

좋은 지적이지만 다른 곳에서 요청한 항목을 사용하고 있는지에 따라 달라집니다. –

+0

두 번째 옵션을 사용했습니다. 그것은 내 질문을 해결했다. 감사 Baloo와 Mr Yoshiji;) – drmwndr

관련 문제