在我的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的方式。
答案 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)
希望它有所帮助