0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ActiveRelationでdefault値を設定する方法

Last updated at Posted at 2019-07-08

前提知識
RailsではActiveRecordがORマピイングシステムでDBとやりとりをしている。

ORマッピング
 railsで決められている方法で記述するだけで、データベースの種類に関係なく、データを扱える仕組み。
利点
・DBの種類毎に変わる記述方法を気にしなくて済む

migration file
DBに反映させたい情報を記載したfile

rails db:migrateを実行すると
timeスタンプの順番に沿って各fileの内容が実行される。

schema
DBへ反映させるための情報が記載されたfile
migration fileの情報を反映させたのがschema
schemaがDBと直接やりとりしている。

使い方。
ターミナルで以下のコマンドを実行する。
rails generate model モデル名 カラム名:その型

モデル名は単数形で先頭は大文字
カラム名:その型、は複数指定できる(書かなくても良い)

カラム名:その型を1つも指定しない場合
ex. ) rails generate model User

作成されるmigration file
スクリーンショット 2019-07-07 13.39.57.png

スクリーンショット 2019-07-07 21.46.05.png

次に
rails db:migrate
を実行する。schemaに以下の様に記述される。

スクリーンショット 2019-07-07 13.40.03.png

カラム名:その型1以上指定した場合
ex. ) rails generate model Player name:string age:integer height:integer

作成されるmigrationfile

次に
rails db:migrate
を実行する 
スクリーンショット 2019-07-07 21.52.07.png

shemaが更新されます。
名前がplayersのテーブルが作られ、カラムには以下の三つが存在する。
名前にstring型、年齢にinteger型、高さにinteger型を持つカラム

スクリーンショット 2019-07-07 13.45.31.png

さて、本題に入りましょう
大前提として、ターミナルで打つコマンドからはdefault値を指定できません。じゃあ、どうするの?
migration fileをいじくり、それをmigarateすることでdefault値を設定します。
default値を設定したいタイミングは以下の通りが考えられるのでそれに沿って説明します。今回はadminにdefaul値を設定します。
・テーブルまたはカラムをまだ作成していない時
・既存のdefault値を変更する
・既に存在するカラムにdefault値を設定する

  1. テーブルまたはカラムをまだ作成していない時
    rails generate migration User name:string age:integer height:integer admin:string
    を実行すると以下のmigration fileが作成されます。
スクリーンショット 2019-07-07 18.24.50.png

adminの後にdefault: faulsを設定してあげます。
スクリーンショット 2019-07-07 18.25.53.png

後はmigrateを実行すれば完成です。
rails db:migrate
schemaにdefaultが作られていることを確認する。
スクリーンショット 2019-07-07 18.30.07.png

rollbackが可能(この場合はtableを作る作業の逆、つまり削除が実行される。)
2,・既存のdefault値を変更する
現状は以下の様になっている。
scheme
スクリーンショット 2019-07-07 18.30.07.png

ここから、trueをfalseに変更したい。
rails generate migration change_column_cats
を実行する。そうすると、以下のmigration fileが作成される。

migration file
スクリーンショット 2019-07-07 18.35.20.png

ここにこう書き足す。
スクリーンショット 2019-07-07 21.33.26.png

rails db:migrateを実行する。
スクリーンショット 2019-07-07 21.33.40.png
adminのdefault値がfalseからtrueになってるのが確認できる。

ただし、この書き方だとrollbackすることができません。
試しにしてみると、、、
スクリーンショット 2019-07-07 21.34.43.png

この様に怒られます。
rollbackは元の状態がわかる必要があります。そのため、以下の様に記述を変えてあげるとかぎゃくせいを持たせる事ができます。
スクリーンショット 2019-07-07 21.58.33.png

以下は時間がある時に追加します。
3.既に存在するカラムにdefault値を設定する

1、2の組み合わせで解決できます。
rollbackを気にしない時

rollbackを気にする時
SQLでのカラムのdefault値はnullになっています。なので、何も指定しない状態だとfrom:〜〜 to:falseの〜〜部分はnilに設定してあげればOKです。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?