2012-08-07 53 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 
相关问题