Jeśli napiszę komentarz dotyczący Twojego statusu, a następnie skomentujesz z powrotem, nie otrzymam powiadomienia z informacją, że skomentowałeś.Jak powiadomić komentującego?
Obecnie tylko właściciel statusu otrzymuje powiadomienia. Jak możemy zrobić, skąd każdy, kto skomentował status, również powinien otrzymać powiadomienie?
Modele
class Comment < ActiveRecord::Base
after_save :create_notification
has_many :notifications
def create_notification
author = valuation.user
notifications.create(
comment: self,
valuation: valuation,
user: author,
read: false
)
end
end
class Notification < ActiveRecord::Base
belongs_to :comment
belongs_to :valuation
belongs_to :user
end
class Valuation < ActiveRecord::Base
belongs_to :user
has_many :notifications
has_many :comments
end
kontrolery
class CommentsController < ApplicationController
before_action :set_commentable, only: [:index, :new, :create]
before_action :set_comment, only: [:edit, :update, :destroy]
def create
@comment = @commentable.comments.new(comment_params)
if @comment.save
redirect_to @commentable, notice: "Comment created."
else
render :new
end
end
private
def set_commentable
@commentable = find_commentable
end
def set_comment
@comment = current_user.comments.find(params[:id])
end
def find_commentable
if params[:goal_id]
Goal.find(params[:goal_id])
elsif params[:habit_id]
Habit.find(params[:habit_id])
elsif params[:valuation_id]
Valuation.find(params[:valuation_id])
elsif params[:stat_id]
Stat.find(params[:stat_id])
end
end
end
class NotificationsController < ApplicationController
def index
@notifications = current_user.notifications
@notifications.each do |notification|
notification.update_attribute(:read, true)
end
end
end
widoki
#notifications/_notification.html.erb
commented on <%= link_to "your value", notification_valuation_path(notification, notification.valuation_id) %>
#comments/_form.html.erb
<%= form_for [@commentable, @comment] do |f| %>
<%= f.text_area :content %>
<% end %>
Twoje pytanie jest zbyt ogólne. _ "za każdym razem, gdy użytkownik komentuje status, każdy komentarz, który pojawi się po tym statusie **, powinien powiadomić użytkownika ** o tym, że został dodany dodatkowy komentarz" _. Co chcesz wiedzieć? Czy pytasz o to, w jaki sposób wiedzieć _when_, aby powiadomić, czy pytasz o _how_, aby powiadomić użytkownika? Co dokładnie masz na myśli przez _notifying_? Niektóre wartości zmieniły się w modelu, wysłano wiadomość e-mail, wyskakujące okienko ... – brito
Jeśli skomentuję Twoją wartość. Następnie, jeśli skomentujesz ponownie tę wartość. Nie dostałem powiadomienia z informacją, że skomentowałeś. Tylko osoba, której wartość ma, otrzyma powiadomienie. Być może istnieje sposób w 'def create_notification' do wykonania tej pracy @brito –
@ AnthonyGalli.com Tak, ponieważ Powiadomienie jest zawsze tworzone z' user: author, 'i' author = valuation.user' (jest to wewnątrz ' create_notification'). Musisz więc utworzyć to konkretne powiadomienie, przekazując autorowi komentarza 'Comment' zamiast autora' Valuation'. – brito