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

Unknow user · September 01, 2016 · Last by u1370743666 replied at September 02, 2016 · 1566 hits

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

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 Floor has deleted
Unknow user #5 September 02, 2016

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

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

UPDATE:

啊看到了

# 排除回帖人
next if uid == reply.user_id
You need to Sign in before reply, if you don't have an account, please Sign up first.