【发布时间】:2014-07-07 21:57:21
【问题描述】:
我希望能够在他在我的 rails 应用程序中创建的内容上向用户显示他收到的 cmets 和喜欢的内容,并在其他用户使用 public activity 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
但我觉得这是一种非常复杂的方法,而且我可能错过了一种更简单的方法,有人有什么建议吗?
【问题讨论】:
-
你在用户模型上有关联吗(例如
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