LoginSignup
4
6

More than 5 years have passed since last update.

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

Posted at

ちょっとわけあって、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>]

参考

4
6
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
4
6