Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Railsでtemporary tableを動的につくってActiveRecordで使えるようにする

More than 1 year has passed since last update.

ちょっとわけあって、1セッションのみで使うTableを動的に作ってすぐ捨てる必要ができた。1セッションのみで使うテーブルは、MySQLのTemporaryTableを使い、さらにActiveRecordとして使えるようにして実現したのでメモ。

Temporary Table

TEMPORARY テーブルは現在のセッションにのみ表示され、そのセッションが閉じられると自動的に削除されます。つまり、2 つの異なるセッションが同じ一時テーブル名を使用することができ、互いに、または同じ名前の既存の TEMPORARY 以外のテーブルと競合することはありません。(既存のテーブルは、一時テーブルが削除されるまで非表示になります。)一時テーブルを作成するには、CREATE TEMPORARY TABLES 権限が必要です。

13.1.17 CREATE TABLE 構文 の一時テーブルの章

動的にTemporaryTable作ってActiveRecord化するサンプルコード

# temporary table 'tmp_tables'の作成
ActiveRecord::Base.connection.create_table('tmp_tables', temporary: true) do |t|
  t.date :date
end

# 作成したtemporary tableをActiveRecordに紐付ける。モデル名はTmpTable。
klass = Class.new(ActiveRecord::Base) do |c|
  c.table_name = 'tmp_tables'
end
Object.const_set('TmpTable', klass)

# 試しに使ってみる
TmpTable.new(date: Date.today).save!
pp TmpTable.all
# -> [#<TmpTable:0x00007feb594af550 id: 1, date: Thu, 13 Dec 2018>]

参考

munaita_
フリーランスのデータエンジニアです。 データ基盤構築や、ビッグデータを扱うシステム構築が得意です。 新卒サイバーエージェントからフリーランス。 広告/小売/教育など幅広いドメインのデータビジネスを経験しています。
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