scaffoldの実行

Scaffoldは rails generate scaffold <Model> <field>:<type> というコマンドで実行します。例えば以下の例は、bodyというフィールドを持つ投稿(Post)モデルのscaffoldを作成しています。

大量のファイルが作成されたのがわかります。それぞれの役割は以下の通りです。

  • db/migrate/20140325013007createposts.rb
    • DBの変更(テーブル作成、カラム変更など)を行うマイグレーションファイル
  • app/models/post.rb
    • PostリソースのModelを定義する
  • test/models/posttest.rb, test/controllers/postscontroller_test.rb
    • ModelやControllerに対応するテストを記述する
  • config/routes.rb
    • ルーティング定義(ユーザのアクセスをControllerのアクションに割り振る)
  • app/controllers/posts_controller.rb
    • アクセスを受けて実行する処理を定義
  • app/views/posts/{index.html.erb,edit.html.erb,show.html.erb,new.html.erb}
    • 各アクションごとに用意されたHTMLのテンプレート
  • app/helpers/posts_helper.rb
    • Postリソースに関係するヘルパーメソッドを定義
  • app/assets/javascripts/posts.js.coffee
    • PostのViewで実行されるCoffeeScriptを記述
  • app/assets/stylesheets/posts.css.scss
    • PostのViewに適用されるスタイルを定義
  • app/assets/stylesheets/scaffolds.css.scss
    • Scaffoldで生成したテンプレート用のスタイル

migrationでDBを更新する

Railsの開発環境はデフォルトでsqlite3というデータベースを利用するようになっており、Rwitter/db/development.sqlite3がデータベースの本体です。

migrationはデータベースへの変更を抽象化し、rakeタスクdb:migrateで実行します。rakeについては過去の記事( RubyのMake、Rakeの使い方 [Ruby] All About )を参照してください。

これでデータベースが更新されました。sqlite3コマンドを使えばデータベースの中身を覗けるので、なにが出来たか見てみましょう。

Postリソースを格納する「posts」テーブルが作成され、text型のbodyというカラムが定義されているのがわかります。他にcreated_atupdated_atというカラムも存在していますが、これはRailsが標準で準備する、データの作成/更新日時を記録するカラムです。また、schema_migrationsテーブルはmigrationステータスを格納する管理用テーブルです。

次のページでは作成された画面とコードを見比べながら、RailsのルーティングとMVCのデータフローを理解していきます。