我知道如何加載,並且我已經在Google和StackOverflow中搜索了其他急切的加載問題。其中一些是啓發性的,但沒有解決我的特殊問題,所以我會自己去問一個問題。如何在加載父對象後急切加載關聯?
這裏是我的架構:
class Organization < ActiveRecord::Base
has_many :activities
has_many :users_logged, source: :user, through: :activities
end
class Activity < ActiveRecord::Base
belongs_to :user
belongs_to :organization
end
class User < ActiveRecord::Base
has_many :activities
end
該項目繼承,我不能做任何重大的架構重新設計,所以如果這個問題是不可能的架構那就這樣吧。我只是想嘗試和加快新一代這些報告涉及加載所有的組織,是這樣的:
Organizations.includes(:users_logged).joins(:activities)
現在,我意識到這裏說的includes(:users_logged)
將加載的所有活動,但joins(:activities)
仍然是必要的根據我排除的排序/分組字段,因爲它們對問題不重要。
現在的問題是,我希望加載所有已被includes(:users_logged)
指令選中的用戶的所有活動,因爲我不僅需要組織詳細信息,相關活動以及所有已記錄活動的用戶爲組織。除此之外,我還需要爲用戶加載所有活動(理想情況下與組織關聯,但我可以在找出如何加載時加以解決)。
我目前的執行情況:
@orgs = Organization.includes(:users_logged).joins(:activities).all
@orgs.each do |org|
org.users_logged.each do |user|
# Just work with user.activities
end
end
這樣每個用戶產生一個查詢,平均0.3 ms
與相當迅速增加測試數據的電流量。有沒有辦法爲一組用戶加載所有活動?
您是否嘗試過'Organization.includes(:users_logged =>:activities).joins(:activities).all'? – Baldrick
我沒有,但我會。 –
@Baldrick Nope,控制檯的結果相同。仍然提出個別要求。 –