Rails 取舍:在 model 中获取 current_user vs 在 model 中决定推送的对象

匿名 · 2016年09月01日 · 最后由 u1370743666 回复于 2016年09月02日 · 1572 次阅读

最近在做推送的时候,发现了这么一个小问题

class Comment < ApplicationRecord
  # self.content
  after_create :create_message
  private
  def create_message
    # 推送给帖子的 owner
    Message.create { receiver: comment.topic.owner }
    # 获取 content 中被 @ 的用户
    at_users = [user1, user2, user3]
    Message.create [{user1}, {user2}, {user3}]
  end
end

这些都挺正常的,但是有一个问题,我自己在我的帖子里回复,我会被推送一个消息,我@我自己,也会推送一个消息。如果想避免这种情况,就需要判断 receiver != current_user。在 stackoverflow 上搜索,找到了解决的办法,都是每个办法都会说明,这种在 model 中获取 current_user 的行为是不好的。有其他的解决办法吗?

comment.owner == comment.topic.owner?

应该判断 receiver != comment.owner 吧

4 楼 已删除
匿名 #5 2016年09月02日

#3 楼 @greatghoul 看了下,如果你在我的帖子里 at 你自己,这个逻辑不能避免吧?

reply.user_id != topic.user_id && !notified_user_ids.include?(topic.user_id)

UPDATE:

啊看到了

# 排除回帖人
next if uid == reply.user_id
需要 登录 后方可回复, 如果你还没有账号请 注册新账号