2016-04-15 68 views
0

我想存儲有關產品部件及其各自價格的數據。部件有不同的類別,但他們有共同的鍵,如:名稱,:製造商,:評級,:部件編號等。什麼樣的結構會對這個組合更好?

作爲編程的初學者,我正在努力尋找適合此的最佳設置: 1)爲每個零件類別製作一個模型;或 2)用這些公共密鑰製作通用零件模型,然後製作具有更多深度屬性的類別模型(屬於零件模型)。

那麼,價格模型應該如何與其他模型相關聯,取決於選擇1還是選擇2?

此外,如果有其他方法我想到的,請告知。編輯[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。我將存儲價格與8位精度和2的比例小數,可與軌道發電機rails g migration AddPriceToProducts price:decimal{8.2}或直接在這樣的遷移來完成:

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

這將價格存儲爲BigDecimal,允許小數點左邊的6位數字和右邊的2位數字。最後,如果你的應用程序打算銷售產品,我建議有一個名爲InvoiceProducts或類似的表格,它可以在產品銷售時存儲產品價格。隨着產品價格變化或產品退役,這將允許準確的長期數據。

+0

我剛剛編輯了這個問題,使其更加詳細。具體來說,我的系統會收集價格並進行比較,幫助人們找到網上商店的最佳選擇。價格變化記錄也是需要的。這將是一種價格欺詐者,但更具體一些。所以作爲一個產品會有很多價格,我認爲在產品模型中放置價格屬性不是一個好的選擇,對嗎? – Riggs

+0

是的。像產品模型中的'''rails g模型價格產品:參考''''has_many:prices'''。 – weilandia