現在、ロードに11秒かかるページがあります。私はBullet Gemを使用して、N + 1クエリーがどこで起こっているかを見つけやすくしています。それは私のいくつかの出力を与えるが、私は本当にそれをどうすればわからない。ここでは弾丸からの出力は次のとおりです。N + 1を停止するための熱心な実装を実装する - Rails
GET /events/1679/dashboard
USE eager loading detected
RSVP => [:tickets]
Add to your finder: :includes => [:tickets]
Call stack
/Users/cameronbass/Desktop/Work/blackbird-rsvp/app/decorators/rsvp_decorator.rb:54:in `tickets?'
/Users/cameronbass/Desktop/Work/blackbird-rsvp/app/views/accepted_rsvps/_list.html.erb:33:in `block in _app_views_accepted_rsvps__list_html_erb___1211423417683052584_70339569780320'
そして、ここでは、この行に
def tickets?
rsvp.tickets.any?
end
それを置くために私に言っていますが団体である:
has_one :ticket
attendee.rb
has_many :tickets, through: :attendees
通常、これはそれらのもののリストを繰り返し、それぞれのチケットを呼び出すことを指します。そのコードは表示されていませんが、おそらくあなたは多岐に渡るリストを持っています。 – tadman
あなたのログを見てください! 1回のリクエストでデータベースが何度もヒットしているのを見ると、おそらくN + 1の状況になります。 eager loadingを使用してdbを1回だけヒットし、関連するテーブルを取得してレコードをロードすることができます。 – bkunzi01
このような質問が表示されたら、私はこの回答にリンクする必要があります:http://stackoverflow.com/a/26251892/525478 YMMV –