Rails 5 - 如何在修改子对象时更新父对象

时间:2016-07-24 23:14:20

标签: ruby-on-rails-5

我的情况是订单由一个或多个订单商品组成。订单商品包括(其中包括)item_price和quantity字段。反过来,订单包含小计,运费,税金和总计字段。我想做的是每当创建,更新或删除关联的订单项时重新计算订单小计和总价值。

我试图在OrderItem模型中使用:after_save和:after_destroy回调,我从中更新父对象。我还尝试在给定的操作(创建,更新,销毁)中从OrderItemsController更新父对象,如下面的代码所示。但似乎正在编辑的给定OrderItem仍然存在。查看日志文件中的输出,看起来在调用回调之后或在控制器操作执行结束时发生数据库上的COMMIT。

我还尝试重新加载Order对象并保存它。

  def update
    if @order_item.update(order_item_params)
      @order_item.save
      @order_item.order.reload
      @order_item.order.save
      redirect_to @order_item.order, notice: 'Order item was successfully updated.'
    else
      render :edit
    end
  end

我有一些解决方案,包括在Order对象上设置'needs_update'布尔值,并在再次需要对象时重新计算所需的值。但这似乎是一个丑陋的解决方案。我觉得我错过了什么。

0 个答案:

没有答案