在本地一样的代码没有出问题,而在服务器上,除了一个奇怪的问题。 部分代码如下:
ActiveRecord::Base.transaction do
@out_stock.pro_out_stocks.each do |pro_out_stock|
stock_fitting = Stock.find_by_fitting_id(pro_out_stock.fitting_id)
stock_fitting_amount = stock_fitting.amount - pro_out_stock.amount
begin
stock_fitting.update_attributes!(:amount => stock_fitting_amount) #stock_fitting_amount<0会抛出异常
rescue
redirect_to :back
return
end
end
end
redirect_to @out_stock
"#{stock_fitting_amount},#{stock_fitting.amount}, #{pro_out_stock.amount}" #然后我显示这些数据哪些出了问题,一看吓一跳。
#显示是这样:-1,-1, 1
也就是说,-1 - 1 = -1 为什么会出现这样的情况的呢? 可是我在显示`stock_fitting.amount 的页面看这个值是 1 的,怎么做减法的时候变成了 -1?
因为我必须确保,stock_fitting_amount >= 0,所以一但 stock_fitting_amount<0,update_attributes! 就会抛出异常,然后却在后面 return 了,采用 if 不会导致脏数据? 是否因为在事务里面,采用了 return,而导致脏数据的产生?