その他
    ホーム 技術発信 DoRuby rails で dbテーブルを truncate する
    rails で dbテーブルを truncate する
     

    rails で dbテーブルを truncate する

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    ruby からDBを操作するとき activerecord に頼らずにはいられません。insert, update, delete などは当然のように使っていますが truncate したいときはどうしたらよいでしょう。何故かよく忘れちゃうのでメモ

    truncate するメソッドはモデルクラス用には用意されていませんでした。

    ですので execute で直接 sql 文を実行します。

    ActiveRecord::Base.connection.execute("TRUNCATE TABLE テーブル名;")
    

    クラスメソッドとして登録してしまうときのサンプル

    class TransactionTable < ActiveRecord::Base
      class << self
        def truncate
          connection.execute "TRUNCATE TABLE #{table_name};"
        end
      end
    end
    

    モデルには記載しないでトランザクションデータだけ削除するスクリプトを作っておくと安全かも

    TRANSACTION_TABLES=TransactionTable, NotMasterTable
    def clear_transaction
      TRANSACTION_TABLES.each do |transaction_model|
        ActiveRecord.execute "TRUNCATE TABLE #{transaction_model.table_name};"
      end
    end