ruby-on-rails - 如何使同一数据库行的多个 ActiveRecord 实例保持同步?

标签 ruby-on-rails

在我的 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/

相关文章:

ruby-on-rails - 在 rake 任务中需要 lib

ruby-on-rails - passenger meet Library not loaded错误: liblzma. 5.dylib

ruby-on-rails - Rails 应用程序中的 Cookie 溢出?

ruby-on-rails - 在 ruby​​ on rails 中删除数组的替代元素

ruby-on-rails - ActionController::InvalidAuthenticityToken Controller 错误

ruby-on-rails - 如何使用 Twitter Bootstrap 图标而不是链接?

ruby-on-rails - 具有 Bootstrap 按钮类的 rails link_to 和 button_to 行为不同

ruby-on-rails - 我如何有条件地在 rails 中设置 <li> 样式?

ruby-on-rails - 如果新属性与现有属性相同,Active Record 是否继续使用 'save'?

ruby-on-rails - 为多个变量赋值..调用方法时