DesignAssembler

備忘録に近い

Railsのポリモーフィック

ポリモーフィック

ポリモーフィック子が複数の親に属していて、かつ全てが同じ関係性の場合に使います。

関連が多くなると、◯◯_idを書くのが手間です。

ポリモーフィックを実装するとこれを書かなくて良くなり、DRYを保てます。

railsでの実装

railsでは各モデルの関連を記述する部分に手を加えてポリモーフィックを実装します。

#子
belongs_to :noticeable, :polymorphic => true
#親1
has_many :items, :as => :noticeable
#親2
has_many :items, :as => :noticeable

これを記述すると子テーブルにnoticeable_idとnoticeable_typeカラムが追加されます。

noticeable_idには親のidが、noticeable_typeには親のクラス名(String)が代入されます。

感想

参考のQiitaの記事にもありますが、ポリモーフィックは便利ですが理解していないとコードが少し読みにくくなります。

ですので多少の関連(3つくらいまで?)なら使わないほうが良いように感じました。

あと、Stringでクラス名が入るのにも違和感を感じます。

参考

railsguides.jp

ポリモーフィック関連のDB構造 | Rails.GrAFR

qiita.com

qiita.com