我想在我的网站上实现一个简单的通知系统,向用户显示一个看不见/未读的项目.类似于Stack Exchange中用于用户收件箱的内容,其中显示了对问题的未读评论等.
我遇到了这个问题,概述了我是如何做到这一点的.我很困惑的是如何弄清楚是否有东西被读过.我可以添加一个read_at列但是如何实际填充它?如果有人能帮我提供一些基本的指导,我会很感激!
更新#1:如果我在我的项目#show action中添加条件,我会检查user_id(创建项目的用户的ID)current_user.id.像下面这样的东西:
unless @item.user_id == current_user.id
@item.read_at = Time.now
end
Run Code Online (Sandbox Code Playgroud)
更新#2:使用下面的代码,我试图更新消息,read_at如果它recipient_id与current_userID 匹配.然而,它不起作用.
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
Run Code Online (Sandbox Code Playgroud)
最后更新:感谢@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
Run Code Online (Sandbox Code Playgroud)
然后在我的helper.rb文件中:
def new_messages
Message.where(:recipient_id => current_user.id, :read_at => nil).count
end
Run Code Online (Sandbox Code Playgroud)
在我的布局中:
<% if new_messages > 0 %><span class="notification"><%= new_messages %></span><% end %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1476 次 |
| 最近记录: |