首页 > 解决方案 > Rails 5.2 急切加载多态嵌套

问题描述

是否可以急切加载多态嵌套关联?我怎么能include doctor_profile代表Recommendation's 和patient_profile's 代表Post's?

我可以打电话Activity.includes(:trackable).last(10),但不确定如何将相关模型包括在内。我试过belongs_to :recommendation, -> { includes :patient_profile, :doctor_profile}没有运气

class Activity
  belongs_to :trackable, polymorphic: true

end

class Recommendation
  has_many :activities, as: :trackable
  belongs_to :doctor_profile

end

class Post
  has_many :activities, as: :trackable
  belongs_to :patient_profile

end

标签: ruby-on-railsactiverecord

解决方案


关于引用这个 SO 答案和 对您的问题的评论,您可以使用多态表中的 foreign_type 字段进行管理,以引用使用它的模型

class Activity
  belongs_to :trackable, polymorphic: true
  # below is additional info
  belongs_to :recommendation, foreign_type: 'Recommendation', foreign_key: 'trackable_id'
  belongs_to :post, foreign_type: 'Post', foreign_key: 'trackable_id'
end

你可以称之为

Activity.includes(recommendation: :doctor_profile).last(10)
Activity.includes(post: :patient_profile).last(10)

Activity.includes(recommendation: :doctor_profile)表示

  • Activity 将加入推荐与 foreign_type 和 trackable_id
  • 然后从推荐将加入 doctor_profile 和 doctor_profile_id

推荐阅读