2009-07-11 8 views
4

craigslist、oodle、kijijiなどの分類されたウェブサイトを訪れた場合、すべてが分類されます。分類を投稿すると、選択したカテゴリに応じて異なるフォームフィールドが表示されます。たとえば、車に関する分類を投稿する場合は、製造元、モデル、インテリアなどが表示されます。データはデータベースでどのように処理されると思いますか?Rails:データベースの動的属性をどのように扱いますか?

あなたは彼らが分類されたそれぞれのタイプごとに別々のテーブルを作成していると思いますか、あるいはすべてが1つのテーブル「クラシファイド」ですか?データが1つの表(STI)を使用して処理される場合は、各シナリオ(分類されたタイプ)ごとに列がなければならず、すべてのフィールドがすべての分類に使用されない可能性があります。

類似のクラシファイドウェブサイトを扱うためにActiveRecordオブジェクトを設計する最良の方法は何ですか?

答えて

0

おそらく別のテーブルがあります。彼らはすべて分類されており、ユーザーにとっては「カテゴリ」ですが、データが非常に異なっていると言いますから、そのために別々に保管されていると思われます。たいていの場合、人々が個々のテーブルを照会するときに、それらをすべて1つの大きなテーブルに格納することへの本当の利点はありません。欠点は、あなたが言うように、すべての型のすべての列が、その1つのテーブルに存在する必要があり、多数のヌルデータを持つ広いテーブルを作成する必要があります。

カテゴリ自体はかなり修正されているので、新しいものを追加するのはかなり稀です。もう1つの方法は、1つの大きなテーブルと動的プロパティのテンプレートに関連付けられたプロパティを定義することです(Classifiedには多くのプロパティがあります)。しかし、それはおそらくパフォーマンスの観点からはうまくいかないでしょう。

+0

テーブル(acts_as_listとacts_as_tree)を使用して属性タイプ(車のタイプ、車のモデルタイプなど)を格納するか、クラス定数として格納するのは良いですか?これらの属性タイプの中には、実行時に追加する必要があるものがあることを忘れないでください – Dharam

+0

属性タイプはおそらく、単に名前(またはユーザーの表示とコンピュータ名の組み合わせ)をキーにしたものです。値は文字列として格納されます。基本的には、キーと値のペアのセットを提供します。誰かが「Ford」を検索するとき、あなたは本当にどこから来るのか本当に気にしませんか?ちょうどその値が見つかりました。 本当に動的である必要がありますか?トップレベルのカテゴリでプロパティのスーパーセットを設定できませんか?住宅は、サブカテゴリーのレンタルなどのためのすべてを持っています – geofflane

1

間違いなく、Classifiedの各タイプの基本スキーマを指定するソースがあります。このようなシステムを自分で実装している場合は、CouchDBなどのスキーマフリー永続性レイヤーを使用して個々のレコードを永続化することで助けてください。

これを行うと、指定されたスキーマタイプに属性を追加または削除すると、古いレコードに影響する必要はありません。

+0

あなたの答えはダンカンが好きですが、これは難しいですが、そうではありませんか?特にRailsで?あなたが解決策を持っているなら、今私はこの厳しい状況で敗北しています。 – pjammer

関連する問題