我正在尝试从人的角度对商店的步骤进行建模,并需要模型设计的帮助以及如何实际实施“购买此产品/服务”部分。
到目前为止,我认为模型设计将是:
Person
has_many :purchases
Purchase
belongs_to :person
belongs_to :product
Products
belongs_to :store
has_many :purchases
一个人可以随意购买许多产品。
我想让“购买此产品”功能成为一个复选框,然后将Purchase
分配给产品但是如何完成?我的模型设计是否正确?
答案 0 :(得分:1)
我认为该模型应该更接近于此。
Service:
belongs_to :store
has_many :products
Products:
belongs_to :store
has_many : purchases
这背后的原因是Service
应该生成Product
这是否是现实世界中的切实利益并不重要(我认为)。例如,机修工提供Service
汽车修理,结束Product
是修理过的车辆。
更新
基本上需要发生的是Person
只需要Collection
或List
(我不知道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