Scaffold を利用して簡単なDBアプリケーションを作成する
Ruby on Rails では、Scaffoldという 一覧表示、詳細表示、新規作成、編集、削除を行うための モデル、コントローラー、ビューの雛形を生成してくれる便利なコマンドがあります。
その Scaffold を使用して、簡単なDBアプリケーションを作成していきます。
前提条件
以下の記事を参考に、Ruby on Rails 環境のセットアップ、およびsample
というアプリケーションが作成されていること
使用環境
Amazon Linux AMI release 2015.03 (x86_64) Ruby 2.2.2 Rails 4.2.3
手順
今回は、ユーザ管理(ユーザの一覧表示、詳細表示、登録、削除)のアプリケーションを作成していきます。
以下の通り、user テーブルを以下の通りにします。
カラム名 | 型 | 説明 |
---|---|---|
uid | string | ユーザID |
string | メールアドレス | |
passwd | string | パスワード |
comment | text | コメント |
ユーザ管理を行うための 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
データベース(sqlite3)にテーブルが定義されていないためです。
テーブルを作成していきますが、sqliteにアクセスしてcreate table
は面倒なので、
Ruby on Railsで用意されているマイグレーション機能を使用して一瞬でテーブルを作成しましょう。
マイグレーションの定義ファイルは、すでに Scaffold を使用した雛形を作成した際に、 以下の通り作成されています。
$ ll ~/sample/db/migrate/*_create_users.rb -rw-rw-r-- 1 ec2-user ec2-user 225 7月 19 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);
画面が表示されました。
以上で終了となります。 次回の記事で、bootstrap を使用して見栄えを良くしていきたいと思います。