IT井戸端会議

IT井戸端会議

インフラ、ネットワーク、アプリケーション開発、IT界隈の話等々を東京都千代田区界隈から発信します。

Scaffold を利用して簡単なDBアプリケーションを作成する

Ruby on Rails では、Scaffoldという 一覧表示、詳細表示、新規作成、編集、削除を行うための モデル、コントローラー、ビューの雛形を生成してくれる便利なコマンドがあります。

その Scaffold を使用して、簡単なDBアプリケーションを作成していきます。

前提条件

以下の記事を参考に、Ruby on Rails 環境のセットアップ、およびsampleというアプリケーションが作成されていること

asobo.hatenablog.jp

使用環境

Amazon Linux AMI release 2015.03 (x86_64) Ruby 2.2.2 Rails 4.2.3

手順

今回は、ユーザ管理(ユーザの一覧表示、詳細表示、登録、削除)のアプリケーションを作成していきます。

以下の通り、user テーブルを以下の通りにします。

カラム名説明
uidstringユーザID
emailstringメールアドレス
passwdstringパスワード
commenttextコメント

ユーザ管理を行うための Ruby on Rails の雛形を以下のコマンドを使用して作成します。

$ cd ~/sample/
$ rails g scaffold user uid email passwd comment:text

上記のrails g 〜の部分は、以下のコマンドを実行しても同じ結果を得られます。

$ rails generate scaffold user uid:string passwd:string comment:text

以下のファイルが生成されていることが確認できます。

sample
└── app
    ├── controllers(コントローラ)
    │   └── users_controller.rb(user用のビュー)
    ├── models(モデル)
    │   └── user.rb(user用のモデル)
    └── views(ビュー)
        └── users(user用のビュー)
            ├── _form.html.erb(他のビューからの参照で使用)
            ├── edit.html.erb(編集)
            ├── index.html.erb(一覧表示)
            ├── new.html.erb(新規作成)
            └── show.html.erb(詳細表示)

それでは、試しにブラウザから表示させてみましょう。

サーバを起動していない場合は、以下のコマンドで起動します。

$ rails s -b 0.0.0.0

ブラウザからのURLでアクセスしてみましょう。 http://<IPアドレス>:3000/users

すると以下のエラーが表示されますw ActiveRecord::PendingMigrationError f:id:candapc:20160118022008p:plain

データベース(sqlite3)にテーブルが定義されていないためです。

テーブルを作成していきますが、sqliteにアクセスしてcreate tableは面倒なので、 Ruby on Railsで用意されているマイグレーション機能を使用して一瞬でテーブルを作成しましょう。

マイグレーションの定義ファイルは、すでに Scaffold を使用した雛形を作成した際に、 以下の通り作成されています。

$ ll ~/sample/db/migrate/*_create_users.rb
-rw-rw-r-- 1 ec2-user ec2-user 225  719 03:19 /home/ec2-user/sample/db/migrate/20150719031944_create_users.rb

中を見るとテーブルを作成していることがわかります。

$ view ~/sample/db/migrate/20150719031944_create_users.rb
class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :uid
      t.string :email
      t.string :passwd
      t.text :comment

      t.timestamps null: false
    end
  end
end

DBのマイグレーションを実行し、確認します。

$ bundle exec rake db:migrate
== 20150719031944 CreateUsers: migrating ======================================
-- create_table(:users)
   -> 0.0010s
== 20150719031944 CreateUsers: migrated (0.0012s) =============================

$ sqlite3 ~/sample/db/development.sqlite3 ".schema users"
CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "uid" varchar, "email" varchar, "passwd" varchar, "comment" text, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL);

画面が表示されました。 f:id:candapc:20160118021842p:plain

以上で終了となります。 次回の記事で、bootstrap を使用して見栄えを良くしていきたいと思います。