🎃

ポリモーフィック関連とは

2024/05/04に公開

Railsのポリモーフィック関連とは、一つのモデルが複数の異なるモデルに属することができる関連付けのことを指します。これにより、異なる種類のオブジェクトを同一の関連付けで扱うことが可能になります。

ポリモーフィック関連の例

例えば、あるアプリケーションに「写真」という機能があり、この写真は従業員や製品など、異なるモデルに関連付けられる場合があります。通常の関連付けでは、各モデルに対して個別の関連付けを設定する必要がありますが、ポリモーフィック関連を使用すると、一つの関連付けでこれらを管理できます。

ポリモーフィック関連の利点

この方式の主な利点は、コードの重複を減らし、拡張性を高めることができる点です。例えば、新しい種類のモデルが追加された場合でも、既存のコードを大きく変更することなく、簡単に関連付けを拡張できます。また、異なるモデル間で共通の機能を持つことができるため、データベースの設計がシンプルになり、管理が容易になります。

実用的なシナリオ

例として、コメント機能を考えてみましょう。ブログ投稿、フォーラムスレッド、イベントなど、異なるコンテキストでコメントが使われる場合、ポリモーフィック関連を使うと、これらすべてのモデルに対して一つの

Comment

モデルを使って関連付けることができます。これにより、新しいコメント機能を追加する際に、新たな外部キーを追加する必要がなくなり、開発の効率が向上します。

そうすると、カラムも複数必要ない。

Railsのポリモーフィック関連を使用する場合、複数の異なるモデルに対して一つのモデルを関連付けることができます。これにより、異なるモデルに対して同じ機能(例えば、コメント機能)を提供したい場合に、それぞれのモデルに対して別々の外部キーカラムを追加する必要がなくなります。ポリモーフィック関連では、通常2つのカラム(

commentable_type

commentable_id

のような)を使用して、関連付けられるモデルの種類とそのIDを保存します。

commentable_type

カラムは関連付けられるモデルのクラス名を保存し、

commentable_id

カラムはそのモデルのIDを保存します。これにより、一つのコメントモデルが複数の異なるモデル(例えば、ブログ投稿、フォーラムスレッド、イベントなど)に対して関連付けられるようになります

.この方法を使用することで、新しい機能を追加する際に新たな外部キーを追加する必要がなく、開発の効率が向上します。また、コードの重複を減らし、アプリケーションの拡張性を高めることができます。ポリモーフィック関連は、DRY(Don't Repeat Yourself)の原則に従い、バグの発生を減らす効果もあります

Discussion