2012-01-30 16 views
3

私はRoRのために、これまで見てきたチュートリアルのすべてが私のようなモデルの生成を示している:これは、モデルのクラスを生成し、私はいくつかの種類の検証を適用した場合にのみ、実際に属性を参照Railsアプリケーションでモデルを定義する一般的な方法は何ですか?

rails generate User name:string placeofbirth:string 

を。

私の質問は、私のモデルを作成する際に「コード」の最初の方法を使用する方法です。それとも、rake db:migrateコマンドを実行して、必要な属性を持つgenerateコマンドを実行して、タイプしているのかを紙面上に表示する方法ですか?

これまでのところ私が見た方法はあまりにも空のように見えるので、私はこの主題についてもう少し実績のあるパターンが大好きです。

答えて

3

はい、これはレールの方法です。マイグレーションが最初に行われ、コードとデータベースが生成され、モデルクラスによってデータベースが検査され、そこにどのフィールドがあり、メソッドを介してアクセス可能になっているかが調べられます。

モデルクラスに属性名とタイプのコメントを追加する場合は、gem install annotate_modelsを使用できます。

は、例えばここを参照してください:https://github.com/ctran/annotate_models

1

Railsは基本的にあなたがモデル内のすべての属性を指定する必要はありませんので、モデルオブジェクトが自動的に属性に、各DBの列をマッピングすることを意味したモデルのためのactive record patternを使用しています。それは機能ですが、誰にとっても完璧ではないと私は同意します。 Rails 3を使用している場合、ActiveRecordのアプローチがあなたに合っていない場合は、別のORMを使用するのは簡単です。 Hereは、使用できる代替ORMです。

1

通常、データベースバックアップされたWebアプリケーションを開発する場合、事前にデータベースの設計(テーブル名、それらのテーブル内の列名、および異なるテーブル間の関連付け)を知っています。

レールでは、maaronsのように、Active Recordパターンを使用しています。モデルはデータベース内のテーブルを表すクラスであり、モデルクラスのインスタンスはそのテーブルの行であり、オブジェクトの異なる属性は同じテーブル内の異なる列の値を表します。

モデルを作成するときは、通常、データベース内のテーブルの1つを表すクラスを作成しています。また、モデルを作成している間は、データベースにテーブルを作成します。これは、テーブルの名前とそのテーブル内の列を知ることを意味します。

あなたの質問にお答えするには、はにはテーブルに含まれるすべての列が必要です。したがって、モデルオブジェクトの属性メソッドとして利用できます。これらの列は、このモデルを生成する際にレールジェネレータによって生成されたマイグレーションのテーブルに追加するように指定します。これは通常誰もがしていることです。

レールモデルジェネレータを実行せずにapp/models/のクラスを作成し、ActiveRecord::Baseから継承しないでコードを先に実行することができます。開発を進めていくうちに、$ rails generate migration MigrationNameで移行を生成し、必要に応じてテーブルを作成し、[add_column][2]を使用して列を追加することができます。このモデルのテーブルを作成したら、そのモデルをActiveRecord::Baseから継承して、アプリケーションですべてのRailsの魔法を得ることができます。

関連する問題