我想在我的网站上实现一个简单的通知系统,向用户显示一个看不见/未读的项目。类似于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_at
与recipient_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 %>
答案 0 :(得分:3)
如何在show动作中填写read_at
列,即我们在show动作中有对象,然后在重新页面之前更新其read_at属性