我试图使用public_activity gem创建一个活动日志。当加载特定用户的活动时,我使用以下命令:
@activity = PublicActivity::Activity.order("created_at desc").where(owner_id: @awardleader.authentication.id).includes(:trackable, trackable: :awardunit)在这里,awardunit协会不会一直存在。由于我跟踪了几个模型,有时跟踪模型没有一个奖励单位。那么,只有在关联可用的情况下,我们才能急切地加载关联?
我想要所有的活动..。在这个列表中,可以有来自不同模型的活动。有些模特没有年龄单位作为联想。因此,上面的代码给出了一个错误,说明没有该模型的增值单位!
PS :如果我使用我在问题中显示的代码,就会出现这样的错误:“在Gold上找不到名为”奖励单位“的协会,也许您拼错了吗?”问题是,我不能删除装载award_unit,因为一些履带有奖励单位
发布于 2013-12-20 11:31:56
包括多态关联,如
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)https://stackoverflow.com/questions/20701770
复制相似问题