Я хотел бы внедрить на своем сайте простую систему уведомлений, где пользователю отображается невидимый / непрочитанный элемент. Аналогично тому, который используется в Stack Exchange для входящих сообщений пользователя, где отображаются непрочитанные комментарии к вопросам и т. Д.
Я сталкивался с этим вопросом , который дает обзор того, как я это сделаю. Что меня смущает, так это как выяснить, прочитано ли что-то. Я мог бы добавить столбец read_at
, но как мне его заполнить? Если бы кто-нибудь мог помочь мне с некоторыми основными рекомендациями, я был бы признателен за это!
ОБНОВЛЕНИЕ # 1: Что, если я добавлю условие к своему действию Шоу Item #, где я проверю user_id
(идентификатор пользователя, создавшего элемент) против current_user.id
. Примерно так:
unless @item.user_id == current_user.id
@item.read_at = Time.now
end
ОБНОВЛЕНИЕ # 2: Используя приведенный ниже код, я пытаюсь обновить read_at
сообщения, если его recipient_id
совпадает с current_user
ID. Однако это не работает.
def show
@message = Message.find(params[:id])
if @message.recipient_id == current_user.id
@message.read_at == Time.now
@message.save
end
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @message }
end
end
ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ: Спасибо @prasvin, вот мое решение. Я добавил read_at
столбец к объекту. Объект также имеет существующий столбец recipient_id
. Таким образом, в выставочном действии моего Контроллера я поставил следующее:
def show
@message = Message.find(params[:id])
if @message.recipient_id == current_user.id
@message.update_attributes(:read_at => Time.now)
end
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @message }
end
end
Тогда в моем файле helper.rb:
def new_messages
Message.where(:recipient_id => current_user.id, :read_at => nil).count
end
А у меня в макете:
<% if new_messages > 0 %><span class="notification"><%= new_messages %></span><% end %>