0

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

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

Person
  has_many :purchases

Purchase
  belongs_to :person
  belongs_to :product

Products
  belongs_to :store
  has_many :purchases

一个人可以根据需要购买许多产品。

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

4

2 回答 2

1

我会假设模型应该更接近这个。

Service:  
belongs_to :store  
has_many :products  

Products:  
belongs_to :store  
has_many : purchases

这背后的原因是,Service应该产生一个Product在现实世界中是否是有形商品并不重要(我认为)。例如,机械师提供Service汽车维修服务,最终Product是修理过的车辆。

更新

本质上需要发生的是你Person只需要一个Collectionor List(我不知道 ruby​​ 数据类型,但它是一个标准的数据结构),它将是 type Product。当显示在 UI 上时,您只需遍历其中的所有Products内容,Person这些将是他们拥有的一切。现在,如果您的意思是Person拥有的所有东西都与总库存相交,这是一个稍微不同的问题。方法是相同的,只是您只需将两个产品列表(Person 拥有的那些和总库存中的一个)相交,然后您就会得到 Person 拥有的所有东西。

于 2012-08-07T12:35:01.780 回答
1

您可以使用 使这更简单一些through,如果您实际上不需要 Purchase 作为模型,您可以只做一个 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
于 2012-08-07T13:17:25.473 回答