2012-11-06 16 views
5

通常、データベースにテーブルを作成/変更するには、マイグレーション(手動でrake db:migrateを実行)を使用してから、私のコードでActiveRecordを使用します。これは非常にクールです、私はdbと特定の種類のdb(sqlserver、pg、またはその他)に関するデータの表現について心配する必要はありません。railsテーブルを動的にデータベースに作成

しかし、今では顧客はコンピュータを売り始めるのと同じようにオンザフライで「物事」を自分自身で作成できるようにしたいので、彼は「コンピュータ」のようなプロパティを持つオブジェクト "名前、RAM、HD、...」と表示されます。これらのすべてのフィールドを持つdb内に別のテーブルを作成するのは非常に自然なことです。しかし、どのようにしてRoRでこれを行い、ActiveRecordに関するこれらのすてきなことをすべて維持することができますか?

お勧めします。

答えて

2

通常の方法で行うことが正反対である:

  • は、各オブジェクトタイプ
  • のフィールド名用のテーブルを持っているオブジェクト・タイプのテーブルはすべてで非常に大きなテーブルを持っている持っています任意のオブジェクトのカスタム属性

これはEAV(エンティティ属性値モデル、http://en.wikipedia.org/wiki/Entity-attribute-value_modelを参照)と呼ばれます。そしてそれはかなり悪くなる。

また、大きなEAVテーブル(http://api.rubyonrails.org/classes/ActiveRecord/Store.htmlを参照)の代わりにstoreテキストカラムを使用することができます。そのため、EAVに特有の困難な属性検索を行う必要はありません。 "オブジェクト型"定義のどこかに格納する必要があるため、フォームや表を作成するときに期待されるフィールドなどを使用できます。

この方法の問題点は、列ではないため、これらの属性を(どこに/ join/select)照会できないかということです。解の数がそれにあります

  • が@Amarとして(ファセット検索に
  • を行うことができます外部の検索サーバを持っている(... MEH)これらの属性をフィルタリングしないでください正しく言う)文書データベースを使用する
  • 単純なシリアル化された列の代わりにpostgreSQLを使用し、hstoreを使用する。
+0

で、@rewrittenと合意したことが分かりません。さらに詳しい例が必要な場合は、「locomotive CMS」(http://locomotivecms.com/)をご覧ください。 )、彼らはあなたがここでやろうとしているのとほぼ同じことをします:) – sameera207

+0

@ sameera207(データベースとしてMongoを使用しています)リンクの例に感謝します。興味深いEAVの実装を見たい場合は、SpreeCommerce:https://github.com/spree/spree – rewritten

+0

を確認してください。 – sameera207

1

NoSQLデータベース(ドキュメントデータベースMongodb、CouchDB)は、これに最も適しています。私の思考通りに使用することができますVertical Table concept MySQL用にRails 2.x Demo of applicationを実行してみてください。 Mongodbを試すことができます。これが必要かどうかを確認してください。

+0

答えが-13:thnxの回答が – xaxa

関連する問題