我想在我的網站上實現一個簡單的通知系統,其中向用戶顯示看不見/未讀的項目。與Stack Exchange中用於用戶收件箱的問題類似,其中顯示了對問題的未讀評論等。如何判斷是否在Rails中讀取了通知
我遇到了this question,它提供了我如何做到這一點的概述。我感到困惑的是如何弄清楚是否有東西被讀取。我可以添加一個read_at
列,但我該如何填寫它?如果有人能夠幫助我一些基本的指導,我會很感激!
更新#1:如果我加一個條件,以我的項目#show動作,我對證current_user.id
的user_id
(用戶在創建項目的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 %>
作爲一個方面說明,我想你可以避免明確說明id。我的意思是,做@ message.update_attributes(:read_at => Time.now)if @ message.recipient_id == current_user'。或者,如果你在Message model'belongs_to:recipient,:class_name =>「User」,:foreign_key =>「recipient_id」'中,只需'@ message.recipient'。只要做一個檢查 - 如果它的工作,它看起來更好看。 – prasvin 2012-02-16 05:56:06
謝謝。我非常喜歡與此類似的東西。很多道具顯示你的進度和工作代碼=)我試圖做到這一點使用Flash通知和你的new_messages幫手幫了很多=) – Sasha 2012-04-24 00:07:38