Help us understand the problem. What is going on with this article?

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

こちらの記事を参考に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を扱う記事がなかったので少しで参考になれば幸いです。
次回は、具体的にアプリケーションのモデルを作成して複数のテーブルを参照できるようにします。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away