既読・未読機能の実装方法
まず、簡単なブログ機能のあるrailsアプリがあるとします。
このアプリのブログ詳細画面に遷移した際に、既読となるような仕様で実装していきたいと思います。
※既読/未読機能を実装するために必要なコードのみ載せています。
ER図
テーブル
- user
- blog
- read
既読機能を実装するにあたって、userテーブルとblogテーブルの中間テーブルが必要になります。
そこで、readテーブルを作成しました。
readテーブルのカラム
- user_id
- blog_id
- complete(boolean型)
completeカラムをboolean型とし、既読/未読を真偽値で取得するようにしました。
モデル
class User < ApplicationRecord
has_many :blogs
has_many :reads, dependent: :destroy
end
class Blog < ApplicationRecord
belongs_to :user
has_many :reads, dependent: :destroy
end
class Read < ApplicationRecord
belongs_to :user
belongs_to :blog
end
コントローラーの設定
class BlogsController < ApplicationController
def show
if Read.create(blog_id: @blog.id, user_id: current_user.id)
@read = Read.update(complete: true)
end
end
showメソッドに、「ブログ詳細画面に飛んだら、現在ログインしているユーザーidとブログidが取得された、readメソッドが作成される。readメソッドが作成されたら、ブログが既読の状態にアップデートされる。」という記述をし、@readに格納します。
complete: true = '既読'
ビューの設定
<%= @read ? '既読' : '未読' %>
「@read ? '既読' : '未読'」 は、三項演算子
という記法で、「?」の前の記述(@read)が、
true(真)であれば:の左側の処理を実行('既読'という文字列の出力を実行)し、
false(偽)であれば:の右側の処理を実行('未読'という文字列の出力を実行)します。
以上のようにコードを記述してくと、ブログ詳細画面に遷移した際に
このように「既読」という文字列を出力できるようになります。