この記事はアピリッツの技術ブログ「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