II-15-4. RoRを利用したデータベースアプリケーション開発

データベースアプリケーションの開発方法を、RoRでどのように実現するかについて具体的な操作手順を交えて説明する。テーブルの定義、テーブル操作、トランザクション処理といったそれぞれの手順がRoRでどう実現されるかを解説する。

【学習の要点】

* テーブルの作成、スキーマの変更はマイグレーションに記述する。

* テーブルに対する新たな行の追加は、対応するModelクラスのnewメソッドを利用してオブジェクトを作成し、saveメソッドで保存することで実現できる。

* テーブルからのデータの取得は、対応するModelクラスのfindメソッドで実現できる。取得したデータはModelクラスのオブジェクトとして返却される。

* 既存の行の更新は、取得したModelクラスのオブジェクトの属性を更新し、saveメソッドで保存することによって実現できる。

* テーブルの既存の行の削除は、対応するModelクラスのクラスメソッド、もしくはインスタンスメソッドにより実現できる。

* トランザクションは、Modelクラスのtransactionメソッドにより実現できる。

図II-15-4. ActiveRecordを利用したデータベース操作

【解説】

1) Model開発の手順

* config/database.ymlファイルに、データベース接続に関する設定を記述する。database.ymlは3つのセクションに分かれており、それぞれ開発用データベース、テスト用データベース、本番用データベースの情報を記述する。

* rakeタスク「rake db:create」を実行することにより、データベースを作成する。

* スクリプト「ruby script/generate model [Model名]」を実行することにより、Modelクラスとマイグレーションの雛形を生成する。

- Modelクラスの雛形はapp/models/ディレクトリに生成される。

- マイグレーションの雛形は、db/migrate/ディレクトリに生成される。

* マイグレーションにデータベーステーブルの作成処理、および削除処理を記述する。

* rakeタスク「rake db:migrate」により、マイグレーションに記述したテーブルの作成処理を実行する。

* アプリケーション仕様に基いて、Modelクラスに検証メソッド、およびビジネスロジックを行うメソッドを追加する。

2) ActiveRecordを利用したデータベース操作

* テーブルに対する新たな行の追加

テーブルに対応するModelクラスのnewメソッドを利用してオブジェクトを作成し、saveメソッドを呼ぶことでデータベースに新たな行が追加される。また、Modelクラスのcreateメソッドを利用することで、オブジェクトの作成と、データベースへの保存を同時に行うことができる。

* テーブルからのデータの取得

テーブルに対応するModelクラスのfindメソッドによって既存の行データをModelクラスのオブジェクトとして取得することができる。findメソッドには主キーのほか、検索条件やソート条件など、SQLで指定できる検索条件の多くを引数の形で指定できる。

* 既存の行の更新

取得したModelオブジェクトの属性の値を変更し、saveメソッドを呼ぶことで、既存の行を更新できる。また、Modelクラスのupdate、およびupdate_allメソッドを利用することで、行データの取得と更新を一度に行うことができる。

* 既存の行の削除

テーブルに対応するModelクラスのdestroy、およびdestroy_allメソッドを利用することで、テーブルレベルの行の削除を行うことができる。また、取得したModelオブジェクトのdestroyメソッドを利用することで、そのオブジェクトに対応する行を削除することができる。

* トランザクション

Modelクラスのtransactionメソッドを利用することで、トランザクション処理を実現できる。トランザクションとして実行される一連の処理はブロックとして渡される。

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。