在我的 Rails 应用程序中,我有这些模型
Order has_many OrderItem
OrderItem belongs_to Order
我的 Controller 有这个(伪)代码:
#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 的方法。
最佳答案
您在从 @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)
希望对你有帮助
关于ruby-on-rails - 如何使同一数据库行的多个 ActiveRecord 实例保持同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1917879/