3rdRailによるRailsプログラミング入門

第2回 ActiveRecordが提供するModel機能を理解しよう

富田 陽介
Banana Systems株式会社

2009/4/24

アソシエーション

 ActiveRecordのアソシエーション機能は、Modelクラス間の関連を定義できる強力な機能です。よく使用する関連の種類を挙げてみます。ここでは異なるModelクラスA、B、Cがあるとして考えてみましょう。

has_one
A has one Bというように、Aが1つのBを“持っている”という関連(「一対一」関連)
has_many
A has many C(s)というように、Aが複数個のCを“持っている”という関連(「一対多」関連)
belongs_to
B belongs to A, C belongs to Aというように、BやCがAに“属している”という関連(上記の「一対一」「一対多」を逆から見た関連とも解釈できる)

 上記のような関連をModelクラス中に記述しておくことで、関連するModelクラスへのアクセスを、あたかも属性値にアクセスするように直観的に利用できるようになります。

 アソシエーションは非常に強力な機能ですが、利用の際にはモデルの属性名の命名規約に注意しなければなりません。アソシエーション機能の具体的な使用例については、第3回、第4回で紹介していきます。

マイグレーション

 マイグレーションは、Modelクラスの追加/更新に合わせて、データベースのスキーマ定義の更新を支援する機能です。Modelクラスの追加時にはマイグレーションファイルが作成され、マイグレーションファイルにはデータベースのスキーマ定義の更新スクリプトが記述されます。

 第1回でHitokotoモデルを作成した際のマイグレーションファイルを確認してみましょう。[Railsエクスプローラー]にあるtsubuyakiプロジェクトから、[データベース]−[マイグレーション]−[年月日時分秒 - Create hitokotos]とたどっていくと、編集エリアに以下のようなマイグレーションファイルが表示されます。

マイグレーションファイル
マイグレーションファイル

 マイグレーションファイルの実体は、ActiveRecord::Migrationクラスを継承したクラスに、クラスメソッドupとdownを定義したスクリプトファイルです。upメソッドの中で、create_tableメソッドによりhitokotosテーブルの作成を宣言し、string型のカラムhitokotoを定義していることが分かります。

 Ruby on Railsでは、データベーススキーマの変更をマイグレーションファイル単位で管理することで、データベーススキーマの簡易的なバージョン管理を実現しています。上記のようにデータベーススキーマのバージョンアップに対応するupメソッドと、バージョンダウンに対応するdownメソッドを実装しておくことで、開発時のデータベーススキーマの更新/切り戻しが簡便に行えます。

 マイグレーションファイルでは、上記のようなテーブル定義の追加や削除に加え、カラム名の変更、カラムへの各種制約の変更、インデックスの付与などデータベーススキーマを更新するための各種操作を記述できます。詳細はマニュアルなどを参照してください。

 以上、ActiveRecord が提供する機能のうち、ファインダ、バリデーション、アソシエーション、マイグレーションを紹介してきました。また、途中、3rdRailのRailsコンソール機能、Rubyドキュメンテーション参照機能、コード補完機能についても紹介しました。

 さて、少し話題が逸れますが、そもそもRuby on Railsというフレームワークは、「Convention over Configuration(設定より規約)」というコンセプトで知られており、規約に則ったコーディングをすることで各種機能の恩恵を受けられるようになっています。

 今回紹介したActiveRecordが提供する機能も同様です。先に挙げたモデルの属性名のほかに、モデル名、コントローラ名などにも命名規約がありますし、アプリケーションセットのディレクトリ名やファイル名の一部についても規約が定められています。

 3rdRailを使用することで、一部の規約を意識せずに開発を進めていくこともできますが、本格的にRailsアプリケーションを開発する際には、ひととおりの規約を理解しておいた方が良いでしょう。本連載では必要な範囲で規約を紹介していきますが、詳しくはマニュアルや書籍などを参照してください。

 次回は、「つぶやき」アプリケーションを改修しながら、Modelクラスの開発ステップについて説明していきます。

prev
3/3
 

Index
ActiveRecordが提供するModel機能を理解しよう
  Page1
ActiveRecordが提供するModel機能
ファインダの動作確認
  Page2
バリデーションの動作確認
Page3
アソシエーション
マイグレーション

index 3rdRailによるRailsプログラミング入門

 Ruby/Rails関連記事
プログラミングは人生だ
まつもと ゆきひろのコーディング天国
 ときにプログラミングはスポーツであり、ときにプログラミングは創造である。楽しいプログラミングは人生をより実りあるものにしてくれる
生産性を向上させるRuby向け統合開発環境カタログ
Ruby on Rails 2.0も強力サポート
 生産性が高いと評判のプログラミング言語「Ruby」。統合開発環境を整えることで、さらに効率的なプログラミングが可能になる
かんたんAjax開発をするためのRailsの基礎知識
Ruby on RailsのRJSでかんたんAjax開発(前編)
 実はAjaxアプリケーション開発はあなたが思うよりも簡単です。まずはRuby on Railsの基礎知識から学びましょう
Praggerとnetpbmで作る画像→AA変換ツール
Rubyを使って何か面白いものを作ってみよう!
 一般的な画像をアスキーアートに変換するツールを作ってみる。さらに出力にバリエーションを持たせてみよう
コードリーディングを始めよう
Railsコードリーディング〜scaffoldのその先へ〜(1)
 優れたプログラマはコードを書くのと同じくらい、読みこなす。優れたコードを読むことで自身のスキルも上達するのだ
  Coding Edgeフォーラムフィード  2.01.00.91


Coding Edge フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

>

Coding Edge 記事ランキング

本日 月間