2013-11-22 33 views
1

我正在使用Bullet gem來幫助我爲ActiveRecord查詢找到n + 1錯誤。我目前傳遞:
ActiveRecord包含n + 1個問題

@user = User.includes(:程序=> {:電梯=> [:鍛鍊:相關信息]})。找到(current_user.id)

對我來說這意味着我正在加載當前用戶,他的例程,那些例程的升降機,以及這些升降機的練習和信息(這是一套)。

  1. 我的假設是正確的嗎?
  2. 子彈寶石是給我兩個錯誤其所聲稱我需要:
    電梯=> [:常規]所以說,增加「.INCLUDE => [:常規]」

    電梯=> [:infos]所以它說添加「.include => [:infos]」

有人能夠向我解釋這個嗎?

謝謝!

回答

0

你一定是在正確的道路上。我強烈建議通過http://guides.rubyonrails.org/

您設置在此刷最多支持預加載,當你訪問的數據是這樣的:

routines = @user.routines 
lifts = @user.routines.map(&:lifts) 

能否請你說明你是如何試圖訪問這些數據?看來,你可能會嘗試通過訪問常規:

lift.routine 

你如何訪問lift

您可能想確保在指定關聯時使用:inverse_ofRoutine有很多:lifts

+0

我目前的關係如下:一個用戶有很多例程,一個例程有很多升降機,一個升降機屬於一個練習並且有很多信息(集合)。我試圖將所有這些加載到一箇中,因爲我在單個頁面上顯示所有例程/升降機/練習名稱/信息(集)。 – user2184718

+0

那麼,練習有一個電梯,還是很多? –

+0

練習有許多電梯,電梯屬於單一練習。這樣我們只有一次在鍛鍊臺上「蹲」的時刻,而多個鍛鍊名稱是「下蹲」的升降臺。 – user2184718