0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Rails]”通知を何かしらの方法で知らせる”の実装

Last updated at Posted at 2020-11-10

通知機能にチャレンジしたけど、なぜか上手くいかない。

お知らせ通知

Image from Gyazo
↑こんな感じで未読のお知らせがあったら、赤い点をつけるみたいなやつを、javascriptとか、helperファイルのアクションを使わずに実装する方法。

まだお知らせ機能自体を実装していない方は下記ののような分かりやすい記事を参考に実装しましょう!

上記の記事でチャレンジしたけど、上手くいかない、、といった私と同じような問題を抱えている方へ向けて。

表示したいビューに紐づくコントローラーのアクションに変数を定義しておく

events_controller.rb
  def index
    @notification = Notification.all
  end

notificationsテーブルの情報を取得.

[簡単]html.erbに記述を追加するだけ

index.html.erb
  <div class="alert-header">
      <%= link_to notifications_path do %>
        <span class="material-icons" id="alert">notification_important</span> 
        <% @notification.each do |notification| %>
          <% if (notification.visited_id == current_user.id) && notification.checked == false %>
            <span class="material-icons" id="on-alert">fiber_manual_record</span>
            <% break %>
          <% end %>
        <% end %>
      <% end %>
    </div>

■解説

<% @notification.each do |notification| %>

コントローラーで定義した@notificationの変数をeachメソッドを用いて通知それぞれに対して処理が行われるようにする。
ブロック変数は今回notificationとしたが何でもOK。

<% if (notification.visited_id == current_user.id) && notification.checked == false %>
    <span class="material-icons">fiber_manual_record</span>
    <% break %>
<% end %>

if条件式を用いて、visited_id(コメントをされた側のユーザーのid)がcurrent_user.id(現在ログインしているユーザーのid)、
尚且つ、notification_checked(notificationsテーブルのcheckedカラム)の値がfalse(未読)であれば以下の処理をする、という記述。

breakとしないと、通知の数だけ処理が繰り返されてしまうので注意。

以上。
何度やっても上手くいかなかったので、自分なりにアレンジしてみました。

備考

current_user.idはサインインしているユーザーを取得するためのgem 'devise'を導入した事で使えるようになるヘルパーメソッドですが、ログインしているユーザーのIDを取得できればOK。

マテリアルアイコンの導入は下記の記事を参考にどうぞ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?