joppot

コピペで絶対動く。説明を妥協しない

プログラミング

ruby on railsのデータベースのテーブルにカラムを追加、削除する

投稿日:


glossy_starling

概要

みなさんこんにちはcandleです。今回はrailsのカラムの追加の仕方を紹介します。
本当にrailsは規約が多くて、多くて、なんでデータベースを直接いじれないんだと。

早速やっていきましょう。


前提

railsの環境が整っている。


テーブルを準備する

今回は下のようなテーブルを使用します。
スキャホールドでPostモデルを作ります。すると自動的にpostsテーブルが作られます。

 rails g scaffold Post title:string description:text

 rake db:migrate

postsテーブルは下のようなカラム構造になります。

"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"title" varchar(255), 
"description" text, 
"created_at" datetime,
"updated_at" datetime

1. sqlite3

実際にレコードを挿入した感じが下のようになります。

Bootstrap

現在はtitleとdescriptionというカラムがありますが、ここにtagというカラムをrailsから追加してみましょう。


railsからカラムを追加する

webアプリケーションフレームワークを使わずにwebアプリケーションを書いたことがある人ならわかると思いますが、データベースの操作は直接データベースをいじりますが、railsではrailsコマンドから操作します。

一般にカラムを追加するには下のコマンドを実行します。

rails generate migration Addカラム名Toテーブル名 カラム名:型名

「Addカラム名Toテーブル名」のカラム名とテーブル名は先頭を大文字にして書きます。スペースを挟んで小文字でカラム名を書き、コロンを入れて、カラムの型を記入します。

今回の事例にそって説明すると、すでにあるpostsテーブルにtagカラムを追加するにはしたのコマンドを入力します。

rails generate migration AddTagToPosts tag:string

多少ややこしいいですね。
実行しましょう。

fe

migrationファイルが作られるので、それを確認します。

Emacs

def changeの中に加える内容が書かれていない場合はrailsのコマンドが間違っています。
そういった時は、一度、作成したマイグレーションファイルを削除して、もう一度、railsコマンドを実行しましょう。

確認したら、この記述をデータベースに反映させます。

rake db:migrate

migra

データベースを確認しましょう。

rails dbでデータベースに移動してみると下の図の様に、tagカラムが追加されています。

lfae

うまくいきました成功です。


railsからカラムを削除する

今度は、作成した、tagカラムを削除します。
一般にカラムを削除するには下のコマンドを実行します。

 rails generate migration Removeカラム名Fromテーブル名 カラム名:型名

「Removeカラム名Fromテーブル名」のカラム名とテーブル名は先頭を大文字にして書きます。スペースを挟んで小文字でカラム名を書き、コロンを入れて、データベースのカラムの型を記入します。

例えば、先ほど作成したtagカラムを削除するには下のように記述します。

 rails generate migration RemoveTagFromPosts tag:string

すると、マイグレーションファイルが作成されますので、それを確認します。

remve

removecolumn

認したら、rake db:migrateコマンドでマイグレーションをデータベースに反映させます。

rake db:migrate

データベースを確認しましょう。

削除されていますね。

まとめ

他にもデータベースの変更や微妙なこともできるらしいです。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-プログラミング
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

phpのsnappyで複数のwebサイトのサムネイルを保存する

概要 前回、snappyの基本的な使い方を試しました。 今回はsnappyを使って、あらかじめ、定義してある複数のwebサイトのサムネイルを保存してみたいと思います。 前提 composerがインスト …

phpmyadminでmysqlデータベースの照合順序を変更する

概要 みなさんこんにちはcandleです。 ちょっとした事なのですが、意外に分からなかったのでまとめました。 phpmyadminを使ってデータベースを作ると、うっかり、utf8_general_ci …

railsのrakeで作成したmigrationファイルとstatus履歴を削除する

概要 みなさんこんにちはcandleです。今回はrakeコマンドで作成したマイグレーションファイルの管理を紹介します。rakeコマンドを使っていると、よくよく考えれば必要の無いファイルがある。とか重複 …

railsのroutesでhttpのGETやPOSTを指定してルーティングを表示する

概要 みんさんこんにちはcandleです。今回は少し頭をひねれば分かる事ですが、少し迷ったので、記事にまとめました。 railsですごいwebアプリケーションを作っていると、ルーティングが複雑きわまり …

react nativeのandroidでfailed to find Build Tools revision 23.0.1エラーが出る時の対処

概要 みなさんこんにちは、candleです。今回はreact nativeでrun-androidでbuildが失敗する時の対処です。 私の場合最新のandroid-sdkを入れたところ、以下のような …

  • English
  • 日本語

ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー