在商店购买的人的设计

时间:2012-08-07 12:29:59

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我正在尝试从人的角度对商店的步骤进行建模,并需要模型设计的帮助以及如何实际实施“购买此产品/服务”部分。

到目前为止,我认为模型设计将是:

Person
  has_many :purchases

Purchase
  belongs_to :person
  belongs_to :product

Products
  belongs_to :store
  has_many :purchases

一个人可以随意购买许多产品。

我想让“购买此产品”功能成为一个复选框,然后将Purchase分配给产品但是如何完成?我的模型设计是否正确?

2 个答案:

答案 0 :(得分:1)

我认为该模型应该更接近于此。

Service:  
belongs_to :store  
has_many :products  

Products:  
belongs_to :store  
has_many : purchases

这背后的原因是Service应该生成Product这是否是现实世界中的切实利益并不重要(我认为)。例如,机修工提供Service汽车修理,结束Product是修理过的车辆。

更新

基本上需要发生的是Person只需要CollectionList(我不知道ruby数据类型,但它是标准数据结构)将是Product类型。当在UI上显示时,您只需迭代Products中的所有Person,这些就是他们拥有的所有内容。现在,如果你的意思是Person拥有的所有内容与总库存相交,这是一个稍微不同的问题。方法是相同的,除了你只需要两个产品列表的交集(人拥有的产品和总库存中的一个产品),你就得到了人拥有的所有东西。

答案 1 :(得分:1)

您可以使用through使这更简单一些,如果您实际上不需要购买模型,那么您可以只执行HABTM(人has_and_belongs_to_many产品)。

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