👜
通知機能の実装 Part1 (ポリモーフィック関連付け)
この記事で分かること
- ポリモーフィック関連付けについて
通知機能の実装方法を調べていると、「ポリモーフィック関連付け」がヒットしたので実装することにしました。
参考にさせていただいた記事
前提条件
- いいね、コメント、フォロー機能が実装済み
ポリモーフィック関連付け
ポリモーフィック関連付け(Polymorphic Association)は、Ruby on Railsなどのプログラムフレームワークで使われるデータモデルの関連付け方法の一つです。このアプローチを用いると、1つのモデルが異なる種類のモデルと関連付けることができます。
ER図(イメージ)
ポリモーフィック関連付けをする理由はnotificationモデルにfavorite_id,post_comment_id,relationship_idの3つのカラムを用意するよりも、subject_idという1つのカラムで済むようになるから便利だよねってイメージでした。
ポリモーフィック関連付けをするメリットは?
ポリモーフィック関連付けをするメリットはnotificationモデルに>favorite_id,post_comment_id,relationship_idの3つのカラムではなくて、subject_idという1つのカラムで済むようになるから便利だよねってイメージでした。
→ 実際にコードを書くときも、(notification.subject)だけで3つのインスタンスを呼び出せるようになります。
このように、プログラムをシンプルに保ちながら、多様な関連性を表現するために使用するらしいです。
ポリモーフィック関連付けをコードで示す
初めにnotificationモデルを作成します。
rails g model notification
class CreateNotifications < ActiveRecord::Migration[6.1]
def change
create_table :notifications do |t|
+ t.references :subject, polymorphic: true
+ t.references :user, foreign_key: true
+ t.integer :action_type, null: false
+ t.boolean :checked, null: false, default: false
t.timestamps
end
end
end
- action_type・・・コメントかいいねかフォローかを数値で仕分けをするため。
- checked・・・既読 or 未読を管理します。 (通知機能では既読済みは削除する)
確認したらmigrateします。
それぞれのモデルに記述します。
notifications.rb
belongs_to :subject, polymorphic: true
- favorite,post_comment,relationship.rb(関連付けしたいモデル)
has_one :notification, as: :subject, dependent: :destroy
これで「ポリモーフィック関連付け」は完成です。
(続き)
この記事をかいた人
23/6/1にDWCに入学し、主にRailsの学習に取り組みました。卒業が近づきこれから何で学習をするか悩んだときに、技術ブログをしようと考えました。初心者ですがよろしくお願いします。
Discussion