Как узнать, было ли что-то прочитано в Rails для уведомления - PullRequest
6 голосов
/ 07 февраля 2012

Я хотел бы внедрить на своем сайте простую систему уведомлений, где пользователю отображается невидимый / непрочитанный элемент. Аналогично тому, который используется в 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 %>

1 Ответ

3 голосов
/ 07 февраля 2012

Как насчет заполнения столбца read_at в действии show, т. Е. У нас есть объект в действии show, а затем обновляется его атрибут read_at перед повторным отображением страницы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...