Ruby on Rails2.1-ActiveRecordsモデル
Rails Active Recordは、Railsに付属のオブジェクト/リレーショナルマッピング(ORM)レイヤーです。これは、次のような標準のORMモデルに厳密に従います。
テーブルはクラスにマップされ、
行はオブジェクトにマップされ、
列はオブジェクト属性にマップされます。
Rails Active Recordsは、リレーショナルデータベースのテーブルとデータベースレコードを操作するRubyプログラムコード間のインターフェイスとバインディングを提供します。Rubyメソッド名は、データベーステーブルのフィールド名から自動的に生成されます。
各ActiveRecordオブジェクトにはCRUD(Create、 Read、 Update、および Delete)データベースアクセスのメソッド。この戦略により、データベーステーブルとアプリケーションオブジェクト間の単純な設計と簡単なマッピングが可能になります。
ドメインモデルのSQLへの変換
Railsに適したSQLを作成する必要があることを覚えている限り、ドメインモデルをSQLに変換することは一般的に簡単です。実際には、次のような特定のルールに従う必要があります。
各エンティティ(本など)は、それにちなんで名付けられたデータベース内のテーブルを取得しますが、複数形(本)で取得します。
このようなエンティティ一致テーブルにはそれぞれ、idというフィールドがあり、テーブルに挿入された各レコードの一意の整数が含まれています。
エンティティxとエンティティyが与えられ、エンティティyがエンティティxに属している場合、テーブルyにはx_idというフィールドがあります。
任意のテーブルのフィールドの大部分は、そのエンティティの単純なプロパティ(数値または文字列)の値を格納します。
アクティブレコードファイルの作成
前の章で紹介したライブラリアプリケーションのエンティティのActiveRecordファイルを作成するには、アプリケーションディレクトリのトップレベルから次のコマンドを発行します。
C:\ruby\library\> ruby script/generate model Book
C:\ruby\library\> ruby script/generate model Subject
あなたは、本と主題のインスタンスを保存するために、BookとSubjectと呼ばれるモデルを作成するようにジェネレーターに指示しています。BookとSubjectを大文字にし、単数形を使用していることに注意してください。これは、モデルを作成するたびに従う必要のあるRailsパラダイムです。
生成ツールを使用すると、Railsは、モデルに固有のすべてのメソッドと定義したビジネスルールを保持する実際のモデルファイル、テスト駆動開発を実行するための単体テストファイル、使用するサンプルデータファイル(フィクスチャと呼ばれる)を作成します。単体テストと、データベースのテーブルと列の作成を容易にするRails移行を使用します。
他の多くのファイルやディレクトリを作成することとは別に、これはという名前のファイルを作成します book.rb そして subject.rb にスケルトン定義を含む app/models ディレクトリ。
book.rbで利用可能なコンテンツ-
class Book < ActiveRecord::Base
end
subject.rbで利用可能なコンテンツ
class Subject < ActiveRecord::Base
end
モデル間の関連付けの作成
Railsアプリケーションに複数のモデルがある場合は、それらのモデル間に接続を作成する必要があります。これは、関連付けを介して行うことができます。Active Recordは、3種類の関連付けをサポートしています-
one-to-one− 1つのアイテムに別のアイテムが1つだけある場合、1対1の関係が存在します。たとえば、人の誕生日が1つだけであるか、犬の所有者が1つだけです。
one-to-many− 1つのオブジェクトが他の多くのオブジェクトのメンバーになることができる場合、1対多の関係が存在します。たとえば、1つの主題に多くの本を含めることができます。
many-to-many −最初のオブジェクトが1つ以上の2番目のオブジェクトに関連し、2番目のオブジェクトが1つ以上の最初のオブジェクトに関連している場合、多対多の関係が存在します。
モデルに宣言(has_one、has_many、belongs_to、has_and_belongs_to_many)を追加することにより、これらの関連付けを示します。
次に、ライブラリデータシステム内で確立する関係をRailsに指示する必要があります。これを行うには、book.rbとsubject.rbを次のように変更します-
class Book < ActiveRecord::Base
belongs_to :subject
end
上記の例では、1つの本が単一の主題に属することができるため、単一の主題を使用しました。
class Subject < ActiveRecord::Base
has_many :books
end
上記の例では、1つの主題に複数の本を含めることができるため、複数の本を使用しました。
検証の実装
検証の実装は、Railsモデルで行われます。データベースに入力するデータは実際のRailsモデルで定義されているため、同じ場所で有効なデータが何を伴うかを定義することだけが意味があります。
開いた book.rb そして、次の検証を入れます-
class Book < ActiveRecord::Base
belongs_to :subject
validates_presence_of :title
validates_numericality_of :price, :message=>"Error Message"
end
- validates_presence_of −「NOTNULL」フィールドをユーザー入力の欠落から保護します。
- validates_numericality_of −ユーザーが数値以外のデータを入力できないようにします。
上記の検証に加えて、他のいくつかの一般的な検証があります。Railsクイックガイドを確認してください。
次は何ですか?
次の章では、Rails Migrationについて学習します。これにより、Rubyを使用してデータベーススキーマへの変更を定義し、バージョン管理システムを使用して実際のコードとの同期を維持できます。