アソシエーション
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クラスの開発ステップについて説明していきます。
3/3 |
Index | |
ActiveRecordが提供するModel機能を理解しよう | |
Page1 ActiveRecordが提供するModel機能 ファインダの動作確認 |
|
Page2 バリデーションの動作確認 |
|
Page3 アソシエーション マイグレーション |
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) 優れたプログラマはコードを書くのと同じくらい、読みこなす。優れたコードを読むことで自身のスキルも上達するのだ |
|
- プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る (2017/7/20)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。最終回は、Linuxカーネルの中では、プログラムの起動時にはどのような処理が行われているのかを探る - エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね? (2017/7/13)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。今回は、プログラムの終わりに呼び出されるexit()の中身を探る - VBAにおけるFileDialog操作の基本&ドライブの空き容量、ファイルのサイズやタイムスタンプの取得方法 (2017/7/10)
指定したドライブの空き容量、ファイルのタイムスタンプや属性を取得する方法、FileDialog/エクスプローラー操作の基本を紹介します - さらば残業! 面倒くさいエクセル業務を楽にする「Excel VBA」とは (2017/7/6)
日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本稿では、業務で使うことが多い「Microsoft Excel」で使えるVBAを紹介する。※ショートカットキー、アクセスキーの解説あり
|
|