我希望能够向用户显示他在我的rails应用程序中创建的内容上收到的评论和喜欢,以及当另一个用户使用公共活动gem跟踪他时通知他。
到目前为止,我已经使Comment
, Like
和Relationship
包括PublicActivity::Common
,并且我在创建每个对象时在控制器中为这些对象创建活动。当当前用户的内容上的活动触发这些活动时,我的问题出现在为当前用户检索这些活动时,到目前为止,我有这个:
post_ids = "SELECT post_id FROM posts WHERE user_id = :user_id"
comment_ids = Comment.where("post_id IN (#{post_ids})", user_id: current_user.id).map(&:id)
comment_activities = PublicActivity::Activity.order("created_at desc").where(trackable_id: comment_ids , trackable_type: "Comment")
like_ids = Like.where("post_id IN (#{post_ids})", user_id: current_user.id).map(&:id)
like_activities = PublicActivity::Activity.order("created_at desc").where(trackable_id: like_ids , trackable_type: "Like")
relationship_ids = Relationship.where(followed_id: current_user.id).map(&:id)
relationship_activities = PublicActivity::Activity.order("created_at desc").where(trackable_id: relationship_ids, trackable_type: "Relationship")
@activities = comment_activities + like_activities + relationship_activities
但是我觉得这是一个非常复杂的方法,我可能错过了一个更简单的方法,有人有什么建议吗?
这个问题的解决方案一直都摆在我面前。为了解决这个问题,我只需要在创建活动时设置活动的recipient
,如下所示:
@comment.create_activity :create, owner: current_user, recipient: @post.user
然后获取活动,我做以下操作:
@activities = PublicActivity::Activity.order("created_at desc").where(recipient_id: current_user.id, recipient_type: "User")
它给出了对当前用户内容执行的操作