PR

Active Recordの使い方

2010年10月13日(水)
朝倉 慎一

6. トランザクション

Active Recordのトランザクションは、データベース接続単位となります。ネスティッド・トランザクションには、SAVEPOINTを利用するかたちで対応しています。分散トランザクションには対応していません。以下に、トランザクション処理の例を示します。transactionメソッドのブロック内が、トランザクション処理です。このブロック内で例外が発生すると、ロールバックします。

TopicComment.transaction do
  @forum.save!
  @topic_comment.save!
  @topic.save!
end

7. データベース・ビュー、既存テーブルなどへのマップ

場合によっては、データベース・ビューを定義してデータを取得したいケースがあります。作成したデータベース・ビューは、テーブルと同様にモデルにマップできます。しかし、マイグレーション・スクリプトでは、直接CREATE VIEWを実行して作成したり、テスト用データベースにもデータベース・ビューが作成されるようにしたり、といった工夫が必要になります。Rails 2.xであれば、rails_sql_viewsといったライブラリ(gem)を使用できます。

既存のデータベースを使用してRailsアプリケーションを作成する場合、テーブルの命名規則や構造がRailsのマッピング・ルールに合わないことがほとんどです。この場合、図3のように、ルールに一致しない箇所をすべて設定することにより、マップできるようになります。

図3: ルールに合わないテーブルへのマップ(クリックで拡大)

モデルとテーブルのマップ以外に、テストで使用するFixture(テスト時に使用するサンプルデータ)のマッピングも行う必要があります。Fixtureに使用するYAMLファイルは、実際のテーブル名で作成する必要があります。図3の例では、r_product.ymlとr_inventory.ymlを作成します。この上で、test_helperに、以下のようにFixtureとモデルのマッピングを行います。

set_fixture_class :r_product => 'Product', :r_inventory => 'Inventory'

8. おわりに

今回は、Rails 3.0のActive Recordに着目して、その使い方を紹介しました。Active Recordひとつにしても、機能がたくさんあり、ここだけでは説明し切れていませんが、Railsアプリケーション開発時の参考にしていただければと思います。

株式会社日立ソリューションズ

技術開発本部 Rubyセンタ所属
1973生まれ。入社後、グループウェア、Webアプリケーションサーバなどの技術サポート業務に従事。現在は、RubyおよびRuby on Railsを中心にしたビジネスを推進中。

連載バックナンバー

Think IT会員サービス無料登録受付中

Think ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。会員登録を済ませてThink ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

他にもこの記事が読まれています