こちらの記事を参考にRDBのVIEWを導入しました。
https://techracho.bpsinc.jp/morimorihoge/2019_06_21/76521
VIEWを使う意図
複数の似ているテーブルをまとめて検索・参照したい
という意図で調査・検討を始めました。
そもそものDB設計として、 "似て非なるものは分ける” という思想で設計を始めるとまとめて表示・検索したい時にどうするか?というところに行き当たります。
Rails ですと、STIかとなるのですが、あまりしっくりきませんでした。サブクラスを参照すると必ず typeで絞り込むことや、アプリケーションよりDBのデータの方が長く使われるということを考えると、やはりサブクラスはテーブルを分けておきたいと考えました。
そこで RDBのUNIONを使って参照だけする方式を検討していました。同じ時期に冒頭の Techracho さんの記事を目にして、うまく当てはまりそうだったので、 Scenic でUNION を使った VIEWを作り、 ActiveRecordのモデルで参照する方法で実装をはじめました。
この記事では、上記実装に向けてまず簡単に Scenicで VIEWを作るところのみの説明をします。
Scenicの導入
gem の README を参考に作業して、すんなりできました。
以下要点だけまとめておきます。
- Gemfileにgem追加
rails g scenic:model 参照用モデル
-
db/views/参照用モデル_v01.sql
に SELECT文を記述 rake db:migrate
db/views/参照用モデル_v01.sql
の例:
SELECT
users.id,
users.email
FROM users
ここまでで、参照用モデルを使ってDBレコードを参照することができるようになりました。VIEWのバージョン管理もできています。
一応実行例を載せておきます。あまり意味が無い気もしますが、参考までに。
rails console
:
参照用モデル.first
終わり
とても簡単な導入記事になってしまいましたが、Qiitaで Scenicを扱う記事がなかったので少しで参考になれば幸いです。
次回は、具体的にアプリケーションのモデルを作成して複数のテーブルを参照できるようにします。
追記:
Twitter @samemuramura にて、Ruby on RailsやWEB開発・グロースハックについての参考情報を配信しています!よろしければぜひフォローください!