0

私の見解では、500のSQLクエリを作成する(500冊の本の情報を取得するための)厄介なループがあります。コントローラに変数をロードすることで、多くのSQLクエリを回避するにはどうすればよいですか?

私の現在の(擬似)コード:

コントローラのインデックスアクション:

@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
4

1 に答える 1

0

これまでに何を試しましたか?http://guides.rubyonrails.org/active_record_querying.htmlに記載されているように、標準のActiveRecordクエリを使用すると非常に簡単になります。

また、代わりに

array_of_books.sort_by{ |k, v| k["Author"] }

次のようなものを試してください

Book.order("author DESC")

(ここで正確なモデルについてはわかりません)配列に入れてrubyに処理させるのではなく、dbに並べ替えを実行させます。

于 2012-07-29T10:42:02.400 に答える