前回は、実用期を迎えたRuby on Rails 3をインストールし、Webアプリケーションの“骨格”を作るところまでを作業しました。
多少なりとも見栄えが整ってきたところで、そろそろ勤務情報を格納するためのデータベースと、これを操作するためのモデルクラスを作成していきましょう。モデルクラスは、Model-View-Controllerの中でまだ手を付けていないModelの部分です。このサンプルでは、図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」の関係にあることを表しています。
●テストデータの準備
もっとも、テーブルを用意しても肝心のデータがなくては、動作の確認にも不都合です。テストデータを準備しておきましょう。
テストデータは「/test/fixtures/テーブル名.yml」というファイルに準備します。リスト4に、具体例を示しておきます。自分でデータを作成する際の参考にしてください。ここでは、配布サンプルに含まれているファイル(employees.yml、departments.yml、states.yml)を/test/fixturesフォルダにコピーして利用するものとします。
テストデータをデータベースに投入するには、
> rake db:fixtures:load
を実行するだけです*2。