0
필자는 500 권의 책에 대한 정보를 얻기 위해 500 개의 SQL 쿼리를 생성하는 fiddly 루프가있다. 변수를 컨트롤러에로드하여 많은 SQL 쿼리를 피할 수 있습니까?하나의 효율적인 SQL 호출 대신에
나의 현재 (의사) 코드 :
컨트롤러의 index 액션 :
@books = Book.scoped.where(:client_id => @client.id).text_search(params[:query])
@feature_root = Book.multiple_summary_details_by_category(@books)
#...returns a hash of books
@features = @feature_root.to_a.paginate(:page => params[:page], :per_page => 4)
index.html.haml
= render :partial => "feature", :locals => { :features => @features }
_features.html.haml
- features.each_with_index do |(cat_name, array_of_books), i|
%h2
= cat_name
- array_of_books[0..10].each do |feature|
= link_to image_tag(feature[:cover], :class => "product_image_tiny"), book_path(feature[:book])
# more code
- array_of_books.sort_by{ |k, v| k["Author"] }.each do |feature|
- feature.each do |heading,value|
%span.summary_title
= heading + ':'
%span.summary_value
= value
물론 컨트롤러에서 기본 쿼리를 사용하여 주 컬렉션을 얻을 수 있지만 많은 쿼리를 생성하는 컬렉션을 반복하고 있습니다. 내 질문은 정말보기 레이어에서 호출 된 쿼리의 수를 최소화하는 방법입니다. 컨트롤러에 루프를 넣으면 각 반복이 이전 반복을 덮어 쓰므로 뷰에서 사용할 수 없습니다. – snowangel
당신의 모델을 정말로 이해하지는 못했지만 컨트롤러에 하나의 쿼리로 가능해야하는 모든 데이터 (summary_title과 summary_value로 가정)가 들어있는 콜렉션/어레이를 만들면됩니다. – bento