前回は、実用期を迎えたRuby on Rails 3をインストールし、Webアプリケーションの“骨格”を作るところまでを作業しました。

 多少なりとも見栄えが整ってきたところで、そろそろ勤務情報を格納するためのデータベースと、これを操作するためのモデルクラスを作成していきましょう。モデルクラスは、Model-View-Controllerの中でまだ手を付けていないModelの部分です。このサンプルでは、図1のようなデータベースを利用します。

図1●データベース関連図。employees、states、departmentsという三つのテーブルを作成する
図1●データベース関連図。employees、states、departmentsという三つのテーブルを作成する
[画像のクリックで拡大表示]

データベースの準備

リスト1●テーブルとモデルの作成
リスト1●テーブルとモデルの作成
[画像のクリックで拡大表示]

モデルクラスとデータベースの作成
 employees、states、departmentsの各テーブルと、これを操作するためのモデルクラスを作成するには、rails generate modelコマンドとrake db:migrateコマンドを利用します(リスト1)。

 コマンドも少し複雑になってきましたが、「rails generate model モデル名」の後で指定しているのは、「列名:
データ型 ...」の繰り返しですので、難しいことはありません*1。間違えないように入力してください。Railsでは、テーブル名を複数形で、対応するモデル名を単数形で表すのが基本です(サンプルの例では、employeesとemployeeのように、です)。また、id(主キー)、created_at、updated_at列は自動的に生成されますので、コマンドから明示的に指定する必要はありません。

 これで/db/development.sqlite3というデータベースにemployees、states、departmentsの各テーブルが、そして、/app/modelsフォルダにはemployee.rb、state.rb、department.rbといったモデルクラスができました。

 できあがったstate.rb、department.rbはそれぞれ、リスト2リスト3のように編集しておきます。「has_many :employees」とは、State(状態)やDepartment(部門)一つに対して、Employee(従業員)が複数いる、つまり「1対n」の関係にあることを表しています。

リスト2●state.rbに追加する内容
リスト2●state.rbに追加する内容
[画像のクリックで拡大表示]
リスト3●department.rbに追加する内容
リスト3●department.rbに追加する内容
[画像のクリックで拡大表示]

テストデータの準備
 もっとも、テーブルを用意しても肝心のデータがなくては、動作の確認にも不都合です。テストデータを準備しておきましょう。

リスト4●employees.ymlの内容
リスト4●employees.ymlの内容
[画像のクリックで拡大表示]

 テストデータは「/test/fixtures/テーブル名.yml」というファイルに準備します。リスト4に、具体例を示しておきます。自分でデータを作成する際の参考にしてください。ここでは、配布サンプルに含まれているファイル(employees.yml、departments.yml、states.yml)を/test/fixturesフォルダにコピーして利用するものとします。

 テストデータをデータベースに投入するには、
> rake db:fixtures:load
を実行するだけです*2