Ruby on rails Rails 4-更新多个表条目

Ruby on rails Rails 4-更新多个表条目,ruby-on-rails,activerecord,ruby-on-rails-4,Ruby On Rails,Activerecord,Ruby On Rails 4,我为一个产品保留了大约25项,表示为product.stock=25。假设我销售5种特定产品。然后我需要将它的剩余库存条目更新为25-5=20或product.stock=product.stock-purchase.quantity 我将如何在我的应用程序中执行此操作。我能把上面的代码放在控制器的某个地方吗 我有一份符合以下要求的采购表: 能够选择现有产品,检索产品的价格 指定用户要购买的数量和金额 显示选择购买的所有产品的总数和总数 我不确定我是否在这里说得很清楚,或者这个主题是否与我的

我为一个产品保留了大约25项,表示为
product.stock=25
。假设我销售5种特定产品。然后我需要将它的剩余库存条目更新为
25-5=20
product.stock=product.stock-purchase.quantity

我将如何在我的应用程序中执行此操作。我能把上面的代码放在控制器的某个地方吗

我有一份符合以下要求的采购表:

  • 能够选择现有产品,检索产品的价格
  • 指定用户要购买的数量和金额
  • 显示选择购买的所有产品的总数和总数

我不确定我是否在这里说得很清楚,或者这个主题是否与我的问题相关。

减少库存的方法应该在产品模型中实现

def减量库存(数量)
自库存=自库存-数量
自救
结束

在控制器中,应根据参数调用此方法

购买控制器.rb

def更新
@product=product.find(参数[:id])
#添加验证以确保您有库存
@产品减量库存(参数[:数量])
#添加您需要做的其他事情并返回@产品
结束


这是一个相当简化的版本。实际上,您应该有一个订单模型、一个订单线模型和一个产品。

我会使用ActiveRecord的方法:

如果购买模型是跟踪最终销售的模型,那么我会将此代码放入ActiveRecord回调中。例如:

class Purchase < ActiveRecord::Base
  belongs_to :product

  after_create :adjust_inventory

  def adjust_inventory
    product.decrement!(:stock, quantity)
  end
end
class-Purchase

在保存之前,购买还应进行
验证,以确保有足够的库存满足订单要求。

只是为了澄清一下:您看到有人试图出售5件物品,对吗?他们在某个框中填入“5”,然后点击submit?Yes@Micah,这是正确的。我应该在哪里调用该函数?我更新了答案。我会争辩说,也许应该在控制器中进行保存。。。或者减量法应该使用感叹号。。。或者可能both@Rafal我确实有一个订单模型,以及作为订单行的产品型号和购买@user3334690,我将尽可能避免在型号中保存,或者让您清楚地看到,为了避免重复调用,可能会导致在保存之前/之后的
功能出现问题,我计划创建一个延期订单条目,并对我们是否需要进行更新特定订单的库存不足。谢谢你,这就解决了问题的目的,我现在试着在保存之前找出
:back\u order
。我已经发布了这个问题的延续:
class Purchase < ActiveRecord::Base
  belongs_to :product

  after_create :adjust_inventory

  def adjust_inventory
    product.decrement!(:stock, quantity)
  end
end