-2

N + 1 の問題があると思いますが、コードで実行されているクエリが多すぎるため、これを最適化する方法について誰かが提案できるかどうかを確認したいと思います。

controllers/profit_reports_controller.rb

def weekly
 @sales = Sale.by_category(@category).this_week(@beg_of_week)
 @departments = Department.by_category(@category)
end 

Profit_reports/weekly.html.erb

<% @departments.each do |department| %>
  <% @stores.each do |store| %>
    <% @sale = @sales.by_store(store).by_department(department).sum(:amount) %>

models/sale.rb

#Associations
belongs_to :store
belongs_to :department

#Scopes
scope :by_category, lambda {|category| where(:category_id => category.id)}
scope :by_department, lambda {|department| where(:department_id => department.id)}
scope :by_store, lambda {|store| where(:store_id => store.id)}
scope :this_week, lambda {|beg_of_week| where(:date_of_sale =>  beg_of_week..beg_of_week + 6.days)}
4

1 に答える 1

0

Bullet gemを使用することを強くお勧めします。レポから:

Bullet gem は、作成するクエリの数を減らすことで、アプリケーションのパフォーマンスを向上できるように設計されています。アプリケーションの開発中にクエリを監視し、熱心な読み込み (N+1 クエリ) を追加する必要がある場合、不要な熱心な読み込みを使用している場合、およびカウンター キャッシュを使用する必要がある場合に通知します。

直し方も教えてくれます。楽しむ!

于 2013-02-04T18:45:48.813 に答える