Ruby on rails Rails 5.2即时加载多态嵌套

Ruby on rails Rails 5.2即时加载多态嵌套,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,是否可以加载多态嵌套关联?我如何才能将医生档案包括在推荐中,将患者档案包括在发布中 我可以调用Activity.includes(:trackable).last(10),但不确定如何包含过去的关联模型。我试过属于:推荐,->{includes:patient\u profile,:doctor\u profile}但运气不好 class Activity belongs_to :trackable, polymorphic: true end class Recommendation

是否可以加载多态嵌套关联?我如何才能将
医生档案
包括在
推荐
中,将
患者档案
包括在
发布

我可以调用Activity.includes(:trackable).last(10),但不确定如何包含过去的关联模型。我试过
属于:推荐,->{includes:patient\u profile,:doctor\u 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
关于参考 对于您的问题,您可以使用多态表中的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)
活动。包括(推荐::医生档案)

  • 活动将加入具有外来\u类型和可跟踪\u id的推荐
  • 然后从推荐加入医生档案和医生档案id

上述答案是可行的,但使用
外来类型实际上并不能达到评论者的目的

foreign\u type
用于指定确定关系类类型的列的名称


我认为这里的预期结果是使用
class\u name
来指定关系所引用的表。如果关系与表同名,则实际上可以推断出
类名
(这就是为什么提供的答案首先起作用)

,以使上述答案起作用,为
所属的
指定
倒数,并为
添加,这使得许多
关联都起到了作用。例如:

课堂活动
属于:可跟踪,多态:真
#以下是其他信息
属于:推荐,外部类型:'Recommension',外部关键字:'trackable\u id',反转::activities
属于:post,外部类型:'post',外部关键字:'trackable_id',与::activities相反
结束
Post
模型上:

有很多:活动,与::post相反
推荐
车型上:

有很多:活动,相反的::推荐

谢谢。你可以先试试,我编辑了我的答案,添加了一些关于一次通话中包含的解释。谢谢-
活动。包括(推荐::医生档案,帖子::患者档案)。最后(10)