【问题标题】:Displaying activities by other users on current user content with public_activity gem使用 public_activity gem 显示其他用户在当前用户内容上的活动
【发布时间】:2014-07-07 21:57:21
【问题描述】:

我希望能够在他在我的 rails 应用程序中创建的内容上向用户显示他收到的 cmets 和喜欢的内容,并在其他用户使用 public activity gem 关注他时通知他。

到目前为止,我已经让CommentLikeRelationship 包含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

但我觉得这是一种非常复杂的方法,而且我可能错过了一种更简单的方法,有人有什么建议吗?

【问题讨论】:

  • 你在用户模型上有关联吗(例如user :has_many :comments)?如果是这样,为什么不只做current_user.comments 而不是Comment.where...(其他关联也一样)。这就是关联的用途:)
  • 另外——一旦你完成了这项工作,我会在谷歌上搜索“多态关联”
  • 是的,我确实建立了这些关联。但是我需要当前用户帖子的评论 ID,不知道如何将其变成 current_user.posts.cmets 类型的交易,我觉得我最终会得到类似于我现在所拥有的东西。并且活动在 gem 中已经是多态的。问题是将所有内容混合到一个流中,并且有不同种类的活动。
  • 啊...在这种情况下你想要has_many :comments, through: :posts

标签: ruby-on-rails ruby activerecord gem public-activity


【解决方案1】:

这个问题的解决方案一直盯着我看。为了解决这个问题,我只需要在创建活动时设置活动的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")

这给了我对当前用户内容所做的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多