2016-04-15 13 views
0

商品の部品とその個別の価格に関するデータを保存します。部品には異なるカテゴリがありますが、名前、メーカー、評価、部品番号などの共通のキーがあります。このアソシエーションにはどのような構造が適していますか?

プログラミングの初心者として、私はこのために最高のセットアップを見つけるのに苦労しています: 1)各部品カテゴリのモデルを作成する。または 2)これらの共通鍵を使用して一般的な部品モデルを作成し、次により深い属性を持つカテゴリモデル(部品モデルに属します)を作成します。

選択肢1または2に応じて、価格モデルは他のモデルとはどのように関連していますか。

また、私が考えたものに代わる方法がある場合は、お知らせください。

EDIT [1]:具体的には、私のシステムは価格を集めて比較します。これは一種の価格競争者だが、より具体的なものになるだろう。だから1つの製品は多くの価格を持っています。

+0

ジョインテーブルと外部キーについてもう少しお読みください。 [このチュートリアル](http://www.theodinproject.com/ruby-on-rails/active-record-associations)を参照してください。 –

+0

私はそれについてもっと詳しく読んでいます。リンクありがとうございました。 – Riggs

答えて

0

あり、正確にあなたの構造についての、あまりにも多くの情報があるが、私はあなたの説明に基づいてpolymorphic association.

+0

私はこの質問をここに掲載した後、開発者でもある友人から同じ提案を受けました。これを踏み出す前に、私は今何をすべきかのようだ。ありがとう!! – Riggs

0

についての詳細情報を取得する必要があることを、想定することができるが、ここで私は、最初のスキーマを構築する方法を示します。

class Product < ActiveRecord::Base 
    belongs_to :manufacturer 
    belongs_to :category 
end 

class Manufacturer < ActiveRecord::Base 
    has_many :products 
end 

class Category < ActiveRecord::Base 
    has_many :products 
end 

ratingのように、モデルを作成するかどうかは、レーティングの入力方法によって異なります。評価が単一のソースによって決定された場合、私はそれを製品モデルの属性として保存するだけです。ユーザの入力に基づいて何らかの計算によって評価が決定された場合、ratings tablebelongs_to :productと考えることがあります。

価格については、Product modelに価格を保存するのが最善の策だと思われます。私はこのような移行にレールジェネレータrails g migration AddPriceToProducts price:decimal{8.2}または直接に行うことができる8の精度と2のスケールと小数点として価格を格納します:これはBigDecimalとして価格を格納します

class AddPriceToProducts < ActiveRecord::Migration 
    def change 
    add_column :products, :price, :integer{8.2} 
    end 
end 

を、小数点の左側に6桁、右側に2桁を許可します。

最後に、あなたのアプリが製品を販売しようとしている場合は、InvoiceProductsなどと呼ばれるテーブルを持っていることをお勧めします。これにより、製品価格の変化や製品の廃止に伴い、正確な長期データが得られます。

+0

私はちょうどより詳細に質問を編集しました。具体的には、私のシステムは価格を集めて比較し、人々がオンラインストアで最良の選択を見つけるのを助けます。価格変更の記録も必要です。これは一種の価格競争者だが、より具体的なものになるだろう。だから1つの製品が多くの価格を持っていると思うのですが、私はそれが製品モデルの中に価格属性を入れるのは良い選択ではないと思いますよね? – Riggs

+0

はい。製品モデルの '' '' '' ''モデルの価格モデル: '' '' has_many:prices''のようなものがあります。 – weilandia

関連する問題