初めてのRuby On Rails② (scaffoldジェネレータ)
Rubyには、コードを自動生成するジェネレータが用意されています。
今回は、データベースのCRUD、
データの作成(Create)、読み出し(Read)、更新(Update)、削除(Delete)
の処理をを自動的に作成してくれる scaffold
ジェネレータを使ってみました。
1.railsプロジェクトの作成
今回は、サンプルとして「bookshelf」というプロジェクトを作成します。
rails new bookshelf
2.scaffoldコマンドの実行
scaffoldジェネレータは、rails generate
から始まるコマンドを使用します。
rails generate scaffold [モデル名] ([カラム名]:[データ型]…)
引数としてモデル名を渡して実行しますが、
ここでオプションとしてカラムを追加することも可能です。
カラムは、[カラム名]:[データ型] の書式で記載します。
今回は、「name」(string)と「description」(text)というカラムを持った「Book」というモデルを作成してみます。
rails generate scaffold Book name:string description:text
以下のように、
関連するモデル、ビュー、コントローラ、テストなどが、自動で生成されます。
invoke active_record create db/migrate/20140603151844_create_books.rb create app/models/book.rb invoke test_unit create test/models/book_test.rb create test/fixtures/books.yml invoke resource_route route resources :books invoke scaffold_controller create app/controllers/books_controller.rb invoke erb create app/views/books create app/views/books/index.html.erb create app/views/books/edit.html.erb create app/views/books/show.html.erb create app/views/books/new.html.erb create app/views/books/_form.html.erb invoke test_unit create test/controllers/books_controller_test.rb invoke helper create app/helpers/books_helper.rb invoke test_unit create test/helpers/books_helper_test.rb invoke jbuilder create app/views/books/index.json.jbuilder create app/views/books/show.json.jbuilder invoke assets invoke coffee create app/assets/javascripts/books.js.coffee invoke scss create app/assets/stylesheets/books.css.scss invoke scss create app/assets/stylesheets/scaffolds.css.scss
まずは、確認のためにhttp://127.0.0.1:3000/books
へ接続してみます。
ActiveRecord::PendingMigrationError
というエラーが表示されました。
これは、rails generate scaffold
コマンドによってプロジェクトの関連ファイルは生成されましたが、
実際のDBのテーブルは、生成されていないため発生するエラーです。
railsがデフォルトで生成されるsqliteDBのファイルを確認しても、テーブルが作成されていないことがわかります。
(dbファイルの場所)
[puroject_path]/db/development.sqlite3
3.DBへマイグレーションファイルを適用する
DBへテーブル情報を反映されるためには、
scaffold
コマンドは、が自動で作成してくれる「マイグレーションファイル」を使います。
「マイグレーションファイル」は、モデルの変更内容をDBへと反映する為の情報が記載されているファイルです。
(マイグレーションファイルの場所)
[puroject_path]/db/migrate/[マイグレーションファイル]
今回は、bookというモデルを作成したので、
[puroject_path]/db/migrate/20140603151844_create_books.rb
というファイルが作成されています。
class CreateBooks < ActiveRecord::Migration def change create_table :books do |t| t.string :name t.text :description t.timestamps end end end
ファイルの中身を見てみるとrails generate scaffold
コマンドで指定したテーブルの、
createメソッドが記述されています。
※ railsでは、モデル名に対して複数型の名称のDBテーブル名をつけるルールになっているため
テーブル名はbooks
となっています。
この、マイグレーションファイルをDBへ反映されるためには、
以下のコマンドを実行します。
rake db:migrate
先ほど確認したsqliteDBファイルを再度確認すると
books
というテーブルができていることが確認できます。
sqlite> .tables books schema_migrations sqlite>
もう一度http://127.0.0.1:3000/books
へ接続し表示を確認すると、
エラーが消え以下のような画面が表示されます。
画面から、New Book
のリンクをクリックすると以下のような画面へ遷移し、
booksテーブルにレコードを追加することができます。
その他、レコードの編集など、
基本的なデータ操作をscaffoldジェネレータを使うだけで簡単に実装することが可能です。