1
我目前有一個需要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_many :tickets, through: :attendees
attendee.rb
has_one :ticket
通常這指的是迭代這些東西的列表,並在每個列表上調用「門票?」。該代碼沒有顯示,但大概你有一個多元列表......無論這些是什麼。 – tadman
看看你的日誌!當你看到數據庫多次被一次請求命中時,你可能有N + 1的情況。您可以使用預先加載來代替只敲一次數據庫來獲取關聯的表,然後加載記錄。 – bkunzi01
當我看到這樣的問題時,我覺得有必要鏈接到這個答案:http://stackoverflow.com/a/26251892/525478。因人而異 –