tusbasaのブログ

業務や勉強中に調べたことを自分用にメモするブログ

単一テーブル継承

DBにある1つのテーブルを、複数のモデルで共有利用すること。 DBテーブル名と同じクラス(スーパークラス)を作成し、そのスーパークラスを継承するサブクラスを作成する。使用するカラム名スーパークラス、サブクラスともに同じ。(同じテーブルに紐づくから当然)

typeというカラム名は避けた方が良い。

継承元のテーブルにはtypeカラムを実装しておく必要がある。 どういうことかと言うと、DB上にはTaxonomyテーブルしか存在しないので、category、tag、authorのデータはtaxonomiesテーブルの中に全部ごっちゃで入っていて、どのクラスのデータかを識別するためにtypeカラムを使うって感じ。 そこで、typeカラムというRailsが標準で用意しているカラムを使用すれば、ActiveRecordがいい感じにtypeにサブクラス名を入れてくれるのです。

上記の点から、普通のカラムとしてtypeカラムを使用するのは良くない。なぜならSTIの機能と判断してしまうから。タイプを表すカラムを使いたいならuser_typeみたいにする必要がある。


参考 ryota21silva.hatenablog.com