RailsのActiveRecordでSQLite3/PostgreSQLのidをリセットする拡張

スポンサーリンク

SQLite3 や PostgreSQL な Rails プロジェクトで、プライマリーキーである id の auto increment な連番(シーケンス)をリセットする ActiveRecord の拡張です。development 環境でサンプルデータをDBテーブルに流し込んだ後に、レコードを delete_all(全部削除)してもう一回サンプルデータ追加をやり直す時なんかに、id が再び 1 から振られるようにするために使う。

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

— 環境 —
Rails 4.2
ActiveRecord 4.2

id をリセットする ActiveRecord 拡張

Rails プロジェクトで lib 以下にファイルを設置する。

lib/active_record/add_reset_pk_sequence_to_base.rb

上記の ActiveRecord::Base.reset_pk_sequence のコードは、以下 stackoverflow ページを参考。
sql – Rails way to reset seed on id field – Stack Overflow

ActiveRecord 拡張が初期化で読み込まれるように設定

lib ディレクトリを autoload_paths に追加する。

config/application.rb

続いて config/initializers に以下のファイルを設置して、作成した ActiveRecord 拡張が初期化で読み込まれるようにします。

config/initializers/lib.rb

id をリセットする使い方

データを rake タスクで投入。このデータを投入する方法は、rake タスク以外何でも良いです。CSV からや SQL 実行とか。

投入したデータをいったん削除して id リセット。

データを再び投入。

以上のようにしてやると、サンプルデータの id が再び 1 から振られてデータを再投入できます。Product.reset_pk_sequence を実行せずに再度データを流し込むと、id の番号振りが以前の連番の最後の次の数字からになります。MySQL の id リセットについては以下リンク参考。

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
 
スポンサーリンク

Leave Your Message!