通知機能
PFに通知機能を搭載したのですが、
理解するのが難しかったため勉強もかねて
通知機能の難しい箇所をひとつひとつ解説することにします!
流れ
・モデルの解説
・コントローラーの解説
・ヘルパーの解説
モデルの解説
app/models/post
# 通知機能のアソシエーション
has_many :notifications, dependent: :destroy
def create_notification_by(current_user)
notification = current_user.notifications.new(post_id: id, visited_id: user_id, action:"like")
notification.save if notification.valid?
end
# comment_idはコントローラーで@comment.idと指定しているので
# 投稿のidを引数にいれている
def create_notification_comment!(current_user, comment_id)
# Commentモデルのpost_idに紐づくすべてのuser_idを引っ張ってくるが
# current_userは引っ張ってこない。
# そしてdistinctをすることで一意になる
temp_ids = Comment.select(:user_id).where(post_id: id).where.not(user_id: current_user.id).distinct
# temp_idsで取ってきたすべてのコメントをeachで回す
temp_ids.each do |temp_id|
# 引数は送る側になるのでdef create_notification_comment!(current_user, comment_id)で
# 指定いる引数と同じにしないといけない
save_notification_comment!(current_user, comment_id, temp_id['user_id'])
end
save_notification_comment!(current_user, comment_id, user_id) # if temp_ids.blank?
end
def save_notification_comment!(current_user, comment_id, visited_id)
notification = current_user.notifications.new(
post_id: id, comment_id: comment_id, visited_id: visited_id, action: 'comment'
)
if notification.visitor_id == notification.visited_id
notification.checked = true
end
notification.save if notification.valid?
end
end