2009-12-16 107 views
1

在我的Rails应用程序我有这些模型如何让同一数据库行的多个ActiveRecord实例保持同步?

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的方式。

回答

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) 

Hopefuly它有助于

相关问题