こんにちはまくロロです。今回はrailsでカラムの追加、削除、などの操作の基礎的なことを説明します。
目次
カラムの概要
カラムを変更したい時ってよくありますよね。railsではカラムを追加するにしても、削除するにしてもまず、マイグレーションファイルを作成する必要があります。
実際にどのような変更がされるのかは、作成されたマイグレーションファイルのchangeメソッドのコードです。そしてマイグレーション を実行することで初めて、そのコードが実行されてdbに変更が反映されます。
したがって、ターミナルで実行するコマンドの時点ではファイルだけしか作成されていないので注意してください。あと、以前テーブルを作成したマイグレーションファイルを編集してdb変更を行うのは、どのような変更が成されたか分からなくなるのでやめたほうが良いです。カラムに何か変更をするときは必ずマイグレーション ファイルを新規に作成しましょう。
さらに、チーム開発などではマイグレーションファイルの命名をしっかりと意味のあるものにしなければいけません。他のエンジニアが何の変更ファイルなのかわからなくなるため、どのような変更を加えたのか分かるファイル名にしましょう。
カラムを追加する
今回は名前、性別カラムを持つユーザーテーブルに新たに年齢を追加する処理をします。
まず、ターミナルでマイグレーション ファイルを作成します。
rails g migration AddColumnToUsers age:integer
gはgenerateの省略形です。一般的には上記のように、ファイルの命名の仕方が【行う処理+テーブルの名前】(AddColumnToUsersの部分です
)のようにするのが一般的だと思います。
するとdbフォルダの中のmigrateフォルダに上記で作ったマイグレーション ファイルが作成されています。
class AddColumnToUsers < ActiveRecord::Migration[5.1] def change add_column :users, :age, :integer end end
このファイルの中身としてchangeメソッドの中で今行なった処理の内容が書かれていますね。今回だと左から
- カラムの追加
- usersテーブルに
- ageカラムを
- integer型で
見たいな感じです。この上記の順番はrailsで決まっているので守ってくださいね。あとはデータベースに反映させるためにマイグレートを実行(rails db:migrate)してください。
これでデータベースにageカラムが追加されていると思います。
カラムの削除
削除も先ほどの追加と手順は同じです。ただaddをremoveに変更してあげれば良いだけです。
rails g migration RemoveColumnToUsers age:integer
(ここで何で削除なのにg(generate)するの〜と聞いてくる方がいますが、先ほども言ったようにここでのgはマイグレーションファイル、すなわち「テーブルに変更をするのに必要なファイル」を作るということなので、カラムを削除するという処理はマイグレーションファイルのchangeメソッドの中に記入してあります。
そして、先ほどのコマンドを実行すると
class RemoveColumnToUsers < ActiveRecord::Migration[5.1] def change remove_column :users, :age, :integer end end
このようなファイルが生成されるはずです。先ほどと違うのはクラスの名前とchangeメソッドの中の最初のremove_colmunだけですね。
外部キーの追加
最後は外部キーの追加です。
外部キーとはテーブル同士を結合する際に、それぞれのテーブルに共通するカラムを一意に特定するためのカラムです。
少し分かりずらいので例を出すと、ツイッターのようなアプリを考えて見てください。userカラムとTweetカラムが必要ですよね。そこで、どのユーザーがどんなTweetをしたかをテーブル同士で、アソシエーション(関連性)を持たせる必要があります。
そこで、Tweetテーブルに外部キーとしてuser_idカラムを作ることにより、誰がどんなツイートをしたかをテーブル同士で特定することができます。そのためにこの外部キーを保存するカラムが必要になってくるのです。
しかし、外部キーと言っても先ほどと同じでただカラムを追加するだけなので、基本的な流れは先ほどの追加や削除と同じですね。
rails g migration AddUserReferenceToTweets user:references
class AddReferenceUserToTweets < ActiveRecord::Migration[5.1] def change add_reference :tweets, :user, foreign_key: true end end
こんな感じです。外部キーの追加だとreferenceに置き換わります。
外部キーを用いたデータのやりとりはこれに加えて、モデルなどもいじる作業が必要になりますが今回はカラムの操作についての記事なので、また今度テーブル感のデータのやりとりの記事は書きたいと思います。
まとめ
今回はカラムの操作についての基本的な操作を書きました。
今回紹介した以外にもchangeやrenameなどのカラム変更を行うコマンドも存在しますが、あまり使わない上、上記のことがわかっていればすぐ理解できると思うので紹介しませんでした。railsを扱う上でカラムの操作は必須なので、必ず覚えておきましょう。
この記事へのコメントはありません。