如何保持同一数据库行的多个ActiveRecord实例同步?

时间:2009-12-16 21:30:15

标签: ruby-on-rails

在我的Rails应用程序中,我有这些模型

Order has_many OrderItem
OrderItem belongs_to Order

我的控制器有这个(伪)代码:

#before_filter
@cart = Order.find(session[:cart_id])

#Action: update_item
item = OrderItem.find(params[:item_id] 
#The order, item belongs to, is in fact @cart, i.e. @cart.id == item.order.id
item.price = 999.99
item.order.total += item.price

在最后一行之后,@cart对象仍具有旧的total值。

在Rails中解决此类情况的最佳方法是什么?我想最简单的方法就是重新加载@cart,但也许有更多类似Rails的方式。

1 个答案:

答案 0 :(得分:3)

您是否在从@cart

获取总数之前保存了该项目
item = OrderItem.find(params[:item_id])
item.price = 999.99
item.save!

从项目的订单中获取总数可以是:

total_price = item.order.order_items.sum(&:price)

我假设Order和OrderItem之间的关系是

class Order
has_many :order_items
...
end

class OrderItem
belongs_to :order
...
end

可以按以下方式重新加载@cart

@cart.reload

或获取更新的总数

@cart.reload.order_items.sum(&:price)

希望它有所帮助