前回 では、”Hello, Rails” を表示するために、Controller と View を作成し、アプリケーションのルートにルーティングするようにしました。今回は Scaffold でアプリケーションの雛形を作成してみます。
5 Scaffolding で立ち上げ素早く実行する
Rails の Scaffolding アプリケーションの主要な部分を生成する手っ取り早い方法です。単一の操作だけの新しい Resource のための Model、View、Controller を作成したいと考えている場合は、Scaffolding は役に立つツールになります。
ちなみに Scaffolding は「足場を組む」という意味だそうです。
6 Resource を作成する
blog アプリケーションのケースでは、Post リソースのための Scaffold を生成するところから始める事ができます。(これは単一の blog への投稿を表現しています。)
これを行うために、次のコマンドをターミナルで実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
Scaffold ジェネレータはいくつかのフォルダに沿って、アプリケーションの中に数個(上の実行結果では 16)のファイルを生成し、config/routs.rb
を編集します。
以下は Scaffold で何が生成されるかを早見表にまとめたものです。実行結果を見ると Rails ではオブジェクトをひとまとめにしたものを複数形として扱っている事に気づくでしょう。今回の場合では、Post が Posts になっています。
ファイル名 | 目的 |
---|---|
db/migrate/20130505013444_create_posts.rb | データベースに Post を作成するためのマイグレーション(実行した環境でタイムスタンプが異なります) |
app/models/post.rb | Post の Model |
test/unit/post_test.rb | Post の Model のための単体テストハーネス |
test/fixtures/posts.yml | テストで使用するサンプルの Post |
config/routs.rb | Post へのルーティング情報を含むように編集された |
app/controllers/posts_controller.rb | Posts Controller |
app/views/posts/index.html.erb | すべての Post の一覧を表示するための View |
app/views/posts/edit.html.erb | すでにある Post を編集するための View |
app/views/posts/show.html.erb | ひとつの Post を表示するための View |
app/views/posts/new.html.erb | Post を新規作成するための View |
app/views/posts/_form.html.erb | 編集と新規作成で使用されるフォームのルック&フィール全体を制御するための部品 |
test/functional/posts_controller_test.rb | Post Controller のための機能テストハーネス |
app/helpers/posts_helper.rb | Post View で使用されるヘルパー機能を集めたもの |
test/unit/helpers/posts_helper_test.rb | posts_helper のための単体テストハーネス |
app/assets/javascripts/posts.js.coffee | Post Controller のための CoffeScript |
app/assets/stylesheets/posts.css.scss | Post Controller で使用する CSS |
app/assets/stylesheets/scaffolds.css.scss | Scaffold の View の見た目を浴するための CSS |
Scaffold はアプリケーションを素早く立ち上げ、実行することができますが、生成されたコードはご自分のアプリケーションには完全にはそぐわないでしょう。ほとんどは、生成されたコードをカスタマイズすることになります。
多くの経験をつんだ Rails 開発者は完全に Scaffold を避けて、全部もしくは大部分のコードをスクラッチから書き上げます。しかしながら、Rails は生成された Model、Controller、View やその他のソースのテンプレートをシンプルにカスタマイズさせてくれます。
より詳しい情報に関しては、Creating and Customizing Rails Generators & Templates を参照すると良いでしょう。
6.1 マイグレーションを実行する
rails generate scaffold
コマンドで生成されたもののひとつに、データベース・マイグレーション が含まれます。マイグレーションは Ruby のクラスで、データベーステーブルを作成したり変更するのをシンプルにするために設計されたものです。Rails はマイグレーションを実行するのに rake
コマンドを使用し、データベースにマイグレーションを実行した後にも取り消せるようになっています。マイグレーションのファイル名はタイムスタンプが含まれ、生成された順番に実行することを保証します。
先程生成された db/migrate/20130505013444_create_posts.rb を見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 |
|
上記のマイグレーションは、change と名づけられたこのマイグレーションを実行する時に呼ばれるメソッドを定義しています。change メソッドは元に戻せる動作も定義しています。つまり、Rails は-後になって変更を元に戻したい場合に-このマイグレーションによってなされた変更を、逆の順番で実行する方法を把握していることを意味しています。
Rails のマイグレーションについてのより詳しい情報は Migrations を参照してください。
現時点で、マイグレーションを実行するための rake
コマンドを使用する事ができます。コマンドを実行してみましょう。
1 2 3 4 5 |
|
Posts テーブルが作成されました。
デフォルトでは、development
環境で作業しているので、先程のコマンドは config/database.yml
の development section で定義されているデータベースに適用されます。他の環境でマイグレーションを実行したい場合には、例えば production
環境では rake db:migrate RAILS_ENV=production
と明示的に環境を指定する必要があります。
6.2 リンクを追加する
既に作成したホームページに Posts を連携するために、ホームページにリンクを追加してみましょう。app/views/home/index.html.erb を開き、以下のように修正します。
1 2 |
|
蛇足ですが、前のサンプルでは Rails の後ろに “!” がついていなかったように記憶しているのですが、気のせいでしょうか。
link_to メソッドは Rails の組み込み View ヘルパーの一つです、表示するためのテキストと行き先に基づいてハイパーリンクを生成-この場合は Posts へのパス-sします。
6.3 ブラウザでの Posts の動作
さて、Postsの動作確認ができる準備が整いました。ブラウザでアクセスして、”My Blog” へのリンクをクリックしてみましょう。WEBrick を起動してない場合は rails server
で WEBrick を起動します。
これまでの一連の流れをまとめると、
rails generate scaffold Post name:string title:string content:text
を実行して、Scaffolding で雛形を作成したrake db:migrate
で Posts テーブルを作成した- app/view/home/index.html.erb を編集して、Posts へのリンクを作成した
- ブラウザを起動して動作確認を行った
ということになります。
切りがいいので 次回 に続きます。