Rails 4 - 为我列出的产品创建账单
Rails 4 - Creating bills about products I have listed
我有一个关于我店里所有产品的模型Product
这基本上只是name:string
和price:decimal
。
在另一边,我有一个模型 Bill
,其中我列出了 Products
的销售量。我想在 Bills 和 Products 之间建立关系 M:N,这样 Bill
可以销售很多产品,而 Product
可以在不同的 Bills 中销售。
但会出现以下问题: 如果我在几年后更改产品价格怎么办?如果我尝试检查过去发行的账单,我会得到错误的金额。
处理这个问题的最佳方法是什么?
你可以给这个添加第三个关系,不要像我在评论中发布的那样让它变得复杂。
例如,我们称它为Transaction
- 产品has_many 交易
- 账单has_many交易
- 交易has_one账单、产品
交易会像 product_id:integer, bill_id:integer, product_amount:integer, product_price:decimal, transaction_amount:decimal
product_amount
- 这将是通过此交易购买的 X 单位产品,假设我买了 10 个苹果,所以 Transaction
对象 product_amount
等于 10
product_price
- 产品当时的当前价格,同例苹果产品购买时的价格
transaction_amount
- 交易总额,比方说 10xApple
这样您就可以跟踪在 Y 时间购买了多少产品,当时的产品价格是多少以及总金额是多少。
现在,当您想知道在 Y 月销售了多少单位的 X 产品时,您会 Transaction.where("product_id = ? and created_at between Y and Y", x.id).sum(:product_amount)
我有一个关于我店里所有产品的模型Product
这基本上只是name:string
和price:decimal
。
在另一边,我有一个模型 Bill
,其中我列出了 Products
的销售量。我想在 Bills 和 Products 之间建立关系 M:N,这样 Bill
可以销售很多产品,而 Product
可以在不同的 Bills 中销售。
但会出现以下问题: 如果我在几年后更改产品价格怎么办?如果我尝试检查过去发行的账单,我会得到错误的金额。
处理这个问题的最佳方法是什么?
你可以给这个添加第三个关系,不要像我在评论中发布的那样让它变得复杂。
例如,我们称它为Transaction
- 产品has_many 交易
- 账单has_many交易
- 交易has_one账单、产品
交易会像 product_id:integer, bill_id:integer, product_amount:integer, product_price:decimal, transaction_amount:decimal
product_amount
- 这将是通过此交易购买的 X 单位产品,假设我买了 10 个苹果,所以Transaction
对象product_amount
等于 10product_price
- 产品当时的当前价格,同例苹果产品购买时的价格transaction_amount
- 交易总额,比方说 10xApple
这样您就可以跟踪在 Y 时间购买了多少产品,当时的产品价格是多少以及总金额是多少。
现在,当您想知道在 Y 月销售了多少单位的 X 产品时,您会 Transaction.where("product_id = ? and created_at between Y and Y", x.id).sum(:product_amount)