model と scaffold を作る
さて、どうやって進めていくかだけど…。 Rails を理解していない(理解することが目的)から、ストレートで完成にたどり着くのは難しい。 だとしたら、少し作って動かして…の繰り返しで進めるのがよさそう。 ということで、最初に定番の scaffold (足場)を作って、そこから少しずつ手を加えることにする。
RandomNote は、 Wiki と違ってページ同士の結びつきが緩い。 特徴である検索は後で考えることにして、まずはページの作成・編集が出来ることを目標にしよう。
作成するものは以下の通り。ほとんどが雛形を自動生成してくれる。
- モデル
- モデルに対応するデータベースのテーブル
- コントローラ
- ビュー
model の作成
script/generate を使って、モデル(Page クラス)を作成する。
$ script/generate model Page exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/page.rb create test/unit/page_test.rb create test/fixtures/pages.yml create db/migrate create db/migrate/001_create_pages.rb
いきなり scaffold を作らずに model だけ作ったのは、 scaffold だとデータベースのマイグレーションファイル (db/migrate/001_create_pages.rb) を作ってくれなかったから。 ちなみに、マイグレーションファイルだけ作りたい時は、「script/generate migration CreatePages」とすればいい。
マイグレーションファイルを開いて、テーブルのスキーマを定義する。 とりあえずは、ページに本文 (body) だけあればいい。 更新日付などは後で足していこう。
$ vi db/migrate/001_create_pages.rb class CreatePages < ActiveRecord::Migration def self.up create_table :pages do |t| t.column :body, :text end end def self.down drop_table :pages end end
マイグレーションファイルが出来ると、 rake コマンドを使ってデータベースへと反映させる。
$ rake migrate
sqlite3 コマンドを使って、データベースにテーブルが作成されていることを確認する。
$ sqlite3 db/development.sqlite3 sqlite> .tables pages schema_info sqlite> .schema pages CREATE TABLE pages ("id" INTEGER PRIMARY KEY NOT NULL, "body" text);
うん。正しく作成されているみたい。
scaffold の作成
model が出来たので、それを操作・表示するための足場 (scaffold) を生成する。
$ script/generate scaffold Page Note exists app/controllers/ exists app/helpers/ create app/views/note exists test/functional/ dependency model exists app/models/ exists test/unit/ exists test/fixtures/ identical app/models/page.rb identical test/unit/page_test.rb identical test/fixtures/pages.yml create app/views/note/_form.rhtml create app/views/note/list.rhtml create app/views/note/show.rhtml create app/views/note/new.rhtml create app/views/note/edit.rhtml create app/controllers/note_controller.rb create test/functional/note_controller_test.rb create app/helpers/note_helper.rb create app/views/layouts/note.rhtml create public/stylesheets/scaffold.css
多くのファイルが生成されたけど、いきなり全てを把握するのは無理。 コントローラ (app/controllers/note_controller.rb) と、そこから呼ばれるビュー (app/views/note/*.rhtml) だけ覚えておこう。
足場ができたら、テスト用のサーバ (WEBrick) を起動する。
$ script/server => Booting WEBrick... => Rails application started on http://0.0.0.0:3000 => Ctrl-C to shutdown server; call with --help for options [2006-10-03 23:54:58] INFO WEBrick 1.3.1 [2006-10-03 23:54:58] INFO ruby 1.8.2 (2005-04-11) [i386-linux] [2006-10-03 23:54:58] INFO WEBrick::HTTPServer#start: pid=2971 port=3000
Web ブラウザでアクセスして、試しにページをいくつか作る。
http://192.168.114.210:3000/note/list (IPアドレスは VMware で設定した Debian サーバのアドレス)
見た目はともかく、機能としてはページの作成・更新・削除ができるようになってる。
データがデータベースに格納されていることを、sqlite3 を使って確認する。
sqlite> SELECT * FROM pages; 1|テストです。 2|RandomNoteは、検索を積極活用しているユニークなメモツールです。 * RandomNote - ninjin さんのオリジナル版 * RandomNote/Perl - yakty さんによる Perl への移植版 * RandomNote/PHP - PHPへの移植版
ここまでは簡単。 ここから何をやればいいかで途方にくれるんだけど、まずは見栄えを変えるところからやってみるか。