以前、railsのアソシエーションについて記事にまとめましたが、今回はその応用である「ポリモーフィック関連づけ」について紹介したいと思います。
Contents
ポリモーフィック関連づけとは
railsにおけるポリモーフィック(polymorphic)関連づけとは、「ある1つのモデルが他の複数のモデルに属していることを、1つの関連付けだけで表現」する方法です。公式のrailsガイドには、以下のように「写真(picture)モデルがあり、このモデルを従業員(employee)モデルと製品(product)モデルの両方に従属させたい」場合の例が挙げられています。
class Picture < ApplicationRecord belongs_to :imageable, polymorphic: trueendclass Employee < ApplicationRecord has_many :pictures, as: :imageableendclass Product < ApplicationRecord has_many :pictures, as: :imageableend
ちなみにpolymorphicという言葉は「多形」を意味する英単語で、ギリシャ語のpolymorphos(「多くの形態の」)から派生した言葉のようです。Javaなどのオブジェクト指向言語には、同じクラスを継承したサブクラスに部分的に異なった処理を行わせる「ポリモーフィズム」という概念がありますが、それもこのpolymorphosからですね。