2012-08-07 88 views
0

我試圖從一個人的立場來模擬商店的步驟,需要模型設計方面的幫助以及如何實際實現「購買這個產品/服務」部分。設計一個人在商店購買

到目前爲止,我認爲模型設計是:

Person 
    has_many :purchases 

Purchase 
    belongs_to :person 
    belongs_to :product 

Products 
    belongs_to :store 
    has_many :purchases 

一個人可以購買很多產品,因爲他們想要的。

我想讓「買了這個產品」的能力複選框,然後將Purchase分配給產品,但怎麼做?我的模型設計是否正確?

+0

所以有人只能購買單品或服務? – 2012-08-07 12:32:05

+0

@Beerlington他們可以有很多,所以他們選擇他們購買的產品,就像在現實生活中去商店一樣。 – LearningRoR 2012-08-07 13:06:23

回答

1

我會假設模型應該更接近這個。

Service: 
belongs_to :store 
has_many :products 

Products: 
belongs_to :store 
has_many : purchases 

這背後的原因是,Service應該產生一個Product這是否是在現實世界中有形好並不重要(我認爲)。例如,技工提供了自動修理的Service,並且結尾Product是修理過的車輛。

UPDATE

本質上需要採取什麼是你Person將只需要一個CollectionList(我不知道紅寶石的數據類型,但它是一個標準的數據結構),這將是類型Product。在用戶界面上顯示時,您只需遍歷該Person中的所有Products,這些將是他們擁有的所有內容。現在,如果你的意思是Person擁有的所有東西都與總庫存相交,那是一個稍微不同的問題。這個方法是一樣的,除了你簡單地把兩個產品清單(人擁有的產品清單和總清單中的產品清單)交叉在一起,你就可以得到Person擁有的所有東西。

+0

現在我只是要擺脫整個服務的事情。我不認爲它是需要的。我改變了我的問題來反映這一點。這是否是正確的模型設計?那麼「買了這個產品」的能力呢? – LearningRoR 2012-08-07 13:08:26

+0

@Railslearner更新了我的回覆,讓我知道如果有什麼不清楚。 – Woot4Moo 2012-08-07 13:20:49

1

使用through可以使這個更簡單一些,如果你實際上不需要購買成爲模型,那麼你可以做一個HABTM(Person has_and_belongs_to_many Products)。

Person 
    has_many :purchases 
    has_many :products, :through => :purchases 

Purchase 
    belongs_to :person 
    belongs_to :product 

Product 
    has_many :purchases 
    has_many :buyers, :through => :purchases, :class => 'Person' 

當一個人購買產品時,你可以記錄這樣的:

@person.products << Product.find(100) 

相關的採購將被自動建立並保存。如果你想記錄的其他信息,如產品在購買時的價格,你可以創建before_save回調,在購買模型設置這些值:

class Purchase < ActiveRecord::Base 
    # ... 
    before_save :record_price 

    def record_price 
    self.price = product.price 
    end 
end 
相關問題