2011-03-27 4 views
2

@orders.closed_today은 오늘 마감 된 모든 주문의 배열입니다.레일 모든 주문의 모든 항목을 가져옵니다

어떻게이 항목을 모두 나열 할 수 있습니까?

@items = @orders.closed_today.items


업데이트 보고서

scope :in_orders, lambda { |orders| where('order_id is in (?)', orders.map(&:id).join(',')) } 

답변

1

간단한 HTML

<% @items = Item.in_orders(@orders.closed_today) %> 

항목 모델 : 항목을 매핑합니다.

@items = @orders.closed_today.all(:include => :items).map(&:items) 

을 줄 것이다 :

=> [[item1,item2],[item2,item3]] 

고유 항목을 얻으려면 :

@orders.closed_today.all(:include => :items).map(&:items).flatten.uniq 

이 관련 개체를 가져 오는 지속 가능한 방법이 아니다을; N + 1 성능 문제를 조심하십시오.

class Item 
    scope :closed_today, joins(:orders) & Order.closed_today 
end 

을 그냥 전화 :

는 더 일반적으로, 당신은 아마 이런 식으로 뭔가를해야 할 일의

Item.closed_today 
+0

이 종류. 결과를 단일 []로 평평하게해야합니다. http://stackoverflow.com/questions/4307411/not-in-rails 줄에 뭔가가 있습니다. Item.order_id가 @ orders.closed_today에 있는지 검색 할 수 있습니다. 때 링크에서 답변을 시도 SQLite3 : : SQLException : 근처에 "에서": 구문 오류 : 내가 뭘 시도했는지 보여주기 위해 업데이트 된 질문. – pcasa

+0

주문 범위에서 범위를 사용하여 항목에 범위를 추가했습니다. 이게 당신이 찾고 있던 것보다 낫지, 맞습니까? – 20man

+0

범위를 람다로 변경하면 범위가 지정된 범위로 융통성있게 적용됩니다. 감사! – pcasa

관련 문제