如何在Rails 4中显示购物车上每种产品的材料价格总和?

时间:2017-12-27 13:15:58

标签: ruby-on-rails

我在rails 4中使用基本购物车制作了一个网络应用程序,它显示了产品的名称,数量和价格,这就是我的问题所在。价格来自其材料的成本,并且由于产品可以有许多材料和材料可用于许多产品,我做了一个名为product_cost的表。我没有计算价格字段,因为材料价格可能随时发生变化,因此产品价格也会发生变化,所以我认为它不会有效。

回到购物车,我需要显示每个产品的价格,为此,计算该产品上使用的所有材料的成本。

下面是结构的简单表示:

    Material Table
      Name
      Unit cost

    Product Cost Table
      Product ID
      Material ID
      Quantity of material

    Product Table
      Name
      Description

我如何处理这种情况?

1 个答案:

答案 0 :(得分:1)

显然这是many-to-many关系,所以我希望你的模型(Material,ProductCost,Product)用has_many_through实现,我选择has_many_ through方式,因为你可以做类似的事情

p = Product.find(1)
product_cost_records = p.product_cost # retrieve array of active-records of the bridge table between product and material
product_cost_records.map do |record|
  record.material.unit * record.quantity # (record.material) gets Material record associated to this bridge record
end.reduce(:+) # map will put the multiplication of (quantity * Unit) into an array then reduce will sum them up

我知道似乎会执行很多查询,但这是我得到的最快的解决方案,请注意我没有在模板应用程序上尝试上面的代码或者我只是猜测应用程序中的关系,希望这可以帮到你。