私は見えない/未読のアイテムがユーザに表示される私のサイトに簡単な通知システムを実装したいと思います。ユーザーの受信トレイのStack Exchangeで使用されている質問と同様に、質問などの未読コメントが表示されます。通知のために何かがRailsで読み込まれたかどうかを確認する方法
this question私はこれをどうやって行うのか概要を知ることができました。私が混乱していることは、何かが読まれたかどうかを判断する方法です。 read_at
列を追加することはできますが、実際にどのように入力すればよいですか?誰かが私にそれを感謝するいくつかの基本的な指導で私を助けることができたら!
UPDATE#1:私はcurrent_user.id
に対してuser_id
(項目を作成しているユーザーのID)を確認し、私のアイテム#showアクションに条件を追加する場合、どのような。
unless @item.user_id == current_user.id
@item.read_at = Time.now
end
UPDATE#2:以下のようなもの以下のコードを使用して、私はそのrecipient_id
がcurrent_user
IDと一致した場合、メッセージのread_at
を更新しようとしています。しかし、それは動作していません。
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
FINAL UPDATE:@prasvinにおかげで、ここに私のソリューションです。オブジェクトにread_at
列を追加しました。オブジェクトには、既存のrecipient_id
列もあります。だから私のコントローラの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 %>
注釈として、IDを明示的に記述するのを避けることができると思います。 @ message.recipient_id == current_user'の場合、 '@ message.update_attributes(:read_at => Time.now)を実行します。あるいは、単にメッセージモデル 'belongs_to:recipient、:class_name =>" User "、:foreign_key =>" recipient_id "'を持っていれば '@ message.recipient'です。チェックをしてください - それが動作すれば、それはより見栄えが良いです。 – prasvin
ありがとうございます。私は非常にこれに似た何かにこだわっていた。あなたの進捗状況と作業コードを表示するための多くの小道具=)私はフラッシュ通知を使用してこれをしようとしていた、あなたのnew_messagesヘルパーは=多く助けた) – Sasha