[英]In Rails, How to Eager Load an Association only if the Association is not nil?
我正在嘗試使用public_activity gem創建活動日志。 加載特定用戶的活動時,我使用以下命令:
@activity = PublicActivity::Activity.order("created_at desc").where(owner_id: @awardleader.authentication.id).includes(:trackable, trackable: :awardunit)
在這里, awardunit
協會不會一直存在。 由於我跟蹤多個模型,因此有時跟蹤的模型沒有獎勵單元。 因此,我們如何才能渴望僅在關聯可用時加載它?
PS:我想獲得所有活動...在該列表中,可以有來自不同模型的活動。 有些型號沒有將Awardunit作為關聯。 因此,以上代碼給出了一個錯誤,指出該型號沒有Awardunit!
PS:如果我使用問題中顯示的代碼,則會出現類似“在Gold上找不到名為'awardunit'的協會;也許您拼錯了密碼?”的錯誤。 問題是我無法刪除正在加載的award_unit,因為某些可跟蹤對象具有awardunit
包括多態關聯,例如
PublicActivity::Activity.includes(:trackable)
將返回
它通過為數據庫生成LEFT OUTER JOIN
來實現。
聲明關聯為多態的,例如
class PublicActivity::Activity < ActiveRecord::Base
belongs_to :trackable, polymorphic: true
end
將兩列添加到您的activities
數據庫表中, trackables_type
和trackables_id
。 您可以在查詢中使用它們。
如果您只想獲得與任何可跟蹤關聯的活動,請使用
PublicActivity::Activity.includes(:trackable).where.not(trackable_type: nil)
如果您只想獲得與AwardUnit
相關聯的活動,請使用
PublicActivity::Activity.includes(:trackable).where(trackable_type: :award_unit)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.