2009-12-16 117 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它有助於

相關問題