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

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

関連記事

emacsでplantUMLをplantuml-modeを使って作成する

Autumn leaves on wood table 概要 みなさんこんにちはcandleです。今回はplantUMLをサポートするemacsのplantuml-modeを導入して使ってみましょう。 …

入門ReactでGSAPアニメーションの使い方

概要 みなさんこんにちはcandleです。今回はReactでGSAPを使ってみたいと思います。 簡単にアニメーションが使えるjsライブラリはjQueryが有名です。ただ、jQueryとReactは相性 …

Rails pluginを使ったgemの作り方[3](vendor/assets 読み込み編)

概要 みなさんこんにちはcandleです。今回はgemでvendorを作成し、それをrailsアプリケーション側で読み込ませる為の方法を紹介します。 よく、gemをインストールすると「app/asse …

docker コマンドのショートカットをbash aliasで作成しました

概要 みなさんこんにちはcandleです。今回はdockerコマンドを簡単に操作するためのエイリアスを紹介します。もちろん、僕が便利かなと思って作成したものなので、コピペしてもらい自由により使いやすく …

railsのscaffoldでremote formを使ってフォームの送信をajax化する

概要 みなさんこんにちはcandleです。 今回はrailsのformをremoteを使ってajaxしたいとおもいます。 正直、解説するまでもなく簡単です。 前提 適当なrailsプロジェクトが存在す …

  • English
  • 日本語

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