Rails のマイグレーションで、DBテーブルのカラムのオプションを変更する

スポンサーリンク

null: false, default: “” のオプションが付いている、DBテーブルのカラムを「NULL値を許可、default値をNULL」に変更します。users テーブルの provider カラムのオプションを、「NULL値:許可しない、default値:””」から「NULL値:許可、default値:NULL」に変更したいと思います。

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

up/down メソッドを定義してマイグレーション作成

いったんDBをリセットして、テーブルのテスト用のレコードを削除します。テスト用レコードが残っているとマイグレートでエラーが起きる可能性があるため。development 環境です。

マイグレーション作成。

db/migrate/***_change_provider_options_to_users.rb

rake db:rollback で1つ前の状態に戻せるように、up と down を各々明示的に定義します。

マイグレート実行。

データベースのテーブル構造を確認

以上、provider カラムのオプションを変更できました。

【追記 2013/12/18】
この作業を行ったあとで考えたのですけど、uid と provider の複合インデックスにユニークキー制約を付けているので、provider に NULL 許可するのはまずいかもしれません。というのも、通常の単一でのインデックス作成にユニークキー成約した場合、MySQL はユニーク制約として NULL を無視するから。

Devise の reset_password_token カラムを見て、MySQL のユニークキーが NULL 重複を許可するのを思い出した | EasyRamble

調査して、複合インデックスの場合でも、ユニーク制約として NULL が無視されるのであれば、このマイグレーションは適用するべきではありません。その場合は、DBを元に戻してマイグレーションファイルを破棄する。

まあカラムのオプションを変更する方法を確認できたので良かったです。

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

Leave Your Message!