Rails 4 - 更新多个表条目

时间:2014-07-03 15:30:49

标签: ruby-on-rails activerecord ruby-on-rails-4

我有大约25件物品留给代表product.stock = 25的产品。假设我卖掉了这个特定产品的5个。然后,我需要将剩余的库存条目更新为25 - 5 = 20product.stock = product.stock - purchase.quantity

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

我的购买表格符合以下要求:

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

我不确定我是否在这里明确或者主题是否与我的问题相关。

2 个答案:

答案 0 :(得分:2)

我会使用ActiveRecord的decrement!方法:

product.decrement!(:stock, purchase.quantity)

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

class Purchase < ActiveRecord::Base
  belongs_to :product

  after_create :adjust_inventory

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

购买还应具有before_save验证,以确保存在足够的库存以满足订单。

答案 1 :(得分:0)

减少库存的方法应在产品型号

中实施

def decrement_stock(qty) self.stock = self.stock - qty self.save end

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

purchase_controller.rb

def update @product = Product.find(params[:id]) # Add validation to make sure you have any stock @product.decrement_stock(params[:quantity]) # Add other things you need to do and return the @product end

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