到目前为止,我对 gem PublicActivity有这个查询。它的一个(我知道的)问题是,如果 activity.trackable 为 nil,它仍会将其包含在查询中,从而迫使我在视图中运行条件,if activity.trackable
如果可跟踪对象,这基本上会有所帮助已被删除,因此您不要尝试访问 nil 对象。
PublicActivity::Activity.
includes(:trackable, :owner).
order('created_at DESC').
where(recipient_id: current_user, kind: "Notification", read: false).
where('owner_id not in (?)', current_user).
size
我想包含一个where
查询以仅查询activity.trackable IS NOT NULL
. 在视图中,使用:activity.trackable.nil?
,我可以查看可跟踪对象是否为零,但我无法弄清楚如何在查询中执行此操作,即使在搜索 SO 和 rails api/docs 之后也是如此。任何指导将不胜感激。
编辑
即使在您销毁trackable
对象后,trackable_id
仍将存储在activity
. 下面是我销毁对象后的活动示例。trackable
#<PublicActivity::Activity id: 389, trackable_id: 865, trackable_type: "Vote", owner_id: nil, owner_type: nil, key: "vote.update", parameters: {}, recipient_id: nil, recipient_type: nil, created_at: "2014-06-22 14:33:37", updated_at: "2014-06-22 14:33:37", kind: nil, read: false>