joppot

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

プログラミング

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

投稿日:

Pocket

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

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

関連記事

CakePHPでhelloworld

概要 CakePHPでプログラミングのお約束helloworldを行いましょう。 helloworldとは動作確認も含めた、一番最初に書くプログラムコードです。 だいたいはhello worldと単純 …

ruby on railsのckeditorでcarrierwaveを使って画像をアップロードする

概要 みなさんこんにちはcandleです。今回はckeditorの画像のアップロードを行ってみたいと思います。 ckeditorの画像のアップロードは公式githubにも記載されているのですが、まあや …

railsでsvgをviewに表示する

概要 みなさんこんにちはcandleです。 今回はrailsでsvgを出力します。 レスポンシブウェブデザインから始まり、最近ではwebでもsvgの使用が増えてきたような気がします。 手こずらずにsv …

Mysqlのdatetime型とtimestanp型で保存されているデータを年月日だけを指定して任意の日にちのデータを取得する方法

概要 みなさんこんにちはcandleです。今日はmysqlのdatetime型とtimestanp型におさめられているデータの取得を紹介します。 datetimeやtimestanpは多くの場合下のよ …

phpでcompassを使った開発の仕方

概要 みなさんこにちはcandleです。今回はphpでcompassを使いたいと思います。 compassは別名scssともいいます。 compassはphpのライブラリが既にあります。 しかし、その …

  • English
  • 日本語

プロフィール


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

スポンサードリンク

アーカイブ