LoginSignup
3
2

More than 3 years have passed since last update.

Scenic を使って、Railsで RDB の VIEWを使う

Last updated at Posted at 2019-07-16

こちらの記事を参考に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 を参考に作業して、すんなりできました。
以下要点だけまとめておきます。

  1. Gemfileにgem追加
  2. rails g scenic:model 参照用モデル
  3. db/views/参照用モデル_v01.sql に SELECT文を記述
  4. 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開発・グロースハックについての参考情報を配信しています!よろしければぜひフォローください!

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2