如何判断是否已在Rails中读取某些内容以进行通知

时间:2012-02-07 03:17:55

标签: ruby-on-rails-3

我想在我的网站上实现一个简单的通知系统,向用户显示一个看不见/未读的项目。类似于Stack Exchange中用于用户收件箱的内容,其中显示了对问题的未读评论等。

我遇到this question,概述了我是如何做到这一点的。我很困惑的是如何弄清楚是否有东西被读过。我可以添加read_at列,但我该如何填充呢?如果有人能帮我提供一些基本指导,我会很感激!

更新#1:如果我在我的项目#show action中添加条件,我会检查user_id(创建项目的用户的ID)current_user.id 。如下所示:

unless @item.user_id == current_user.id
  @item.read_at = Time.now
end

更新#2 :使用下面的代码,如果邮件的read_atrecipient_id ID匹配,我会尝试更新邮件current_user。但它不起作用。

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列。所以在我的Controller的show动作中,我提出以下内容:

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 个答案:

答案 0 :(得分:3)

如何在show动作中填写read_at列,即我们在show动作中有对象,然后在重新页面之前更新其read_at属性