我正在尝试运行一个简单的循环来增加数据库表中的属性,并且没有按预期增加。想象一下,我们的应用程序是一个每日交易网站。我正在使用 Rails 3.0.1,作为记录。
class Deal
has_many :orders
end
class Order
belongs_to :deal
end
订单也有一个属性“数量”——例如某人购买了几件相同的东西。如果有人在购物车中购买了一堆订单,我们希望统计每笔交易的总数,以跟踪我们在每笔交易中卖出了多少。
@new_orders.each do |order|
order.deal.update_attribute(:order_count, order.deal.order_count + order.quantity)
end
首先,忽略这样一个事实,即可能有更好的方法来写这个。这是一个人为的例子,以达到我的观点。
现在,假设我们当前的情况是有人在购物车中购买了 3 个相同交易的订单(没有充分的理由 - 这个例子有点做作)。假设每个订单的数量为 1。
我本来预计,在循环结束时,交易的数量是 3。但是当我运行这段代码时,无论是在测试中、在浏览器上还是在控制台中,我都会得到 1。
似乎在循环的每次迭代中,当它拉取“order.deal”时——因为每个订单恰好属于同一个交易,所以它从缓存中拉取交易。因此,假设在此循环开始之前,交易的 order_count 为 0,每次它提取一个 order_count 为 0 的交易的缓存副本。
这是预期的行为吗?有没有办法关闭这种类型的缓存?更奇怪的是,我的一位同事试图在他的项目中运行类似的循环并得到预期的总数。还是我完全错过了什么?
谢谢你的帮助!