0
我有一个Order/LineItem类型的应用程序,它将一个Order及其关联的行项目插入到数据库中。订单创建后(after_create),然后我调用一个函数来更新订单表中的总计字段。但是,当它运行时,它也会对所有行项目运行更新查询,并且由于paper_trail对update更新有效,所以它也会插入新版本。问题是,可能有数百个订单项(迄今为止最大的是872个),所以显然这不是非常优化,并且由于纸质记录,我们会得到不必要的版本。更新父级更新时停止子级模型
我看了看:触摸符号,但这似乎只能工作的孩子>父母,而不是父母>孩子。
当更新父项时,是否有办法阻止订单项上的更新被触发?
这里是浓缩的控制器/型号。
OrdersController:
class OrdersController < ApplicationController
def create
@order = Order.new(order_params)
if @order.save
render :json => @order, :serializer => ::OrderSerializer
end
end
订单型号:
class Order < ActiveRecord::Base
has_paper_trail
belongs_to :customer
has_many :line_items, :dependent => :destroy
after_create :update_total_quantities
accepts_nested_attributes_for :line_items
def update_total_quantities
update_attributes({:total_quantity => calculated_total_quantity})
end
end
的LineItem模型:
INSERT INTO "line_items" ("colour", "created_at", "order_id", "price", "product_id", "quantity", "size", "updated_at", "variant_id") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING "id"[0m [["colour", 2], ["created_at", Wed, 08 Jan 2014 11:47:38 UTC +00:00], ["order_id", 1216], ["price", 77.0], ["product_id", 241702], ["quantity", 1], ["size", "18"], ["updated_at", Wed, 08 Jan 2014 11:47:38 UTC+00:00], ["variant_id", "241702_2_18"]
INSERT INTO "line_items" ("colour", "created_at", "order_id", "price", "product_id", "quantity", "size", "updated_at", "variant_id") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING "id" [["colour", 106], ["created_at", Wed, 08 Jan 2014 11:47:38 UTC +00:00], ["order_id", 1216], ["price", 20.0], ["product_id", 2753], ["quantity", 1], ["size", "18"], ["updated_at", Wed, 08 Jan 2014 11:47:38 UTC +00:00], ["variant_id", "2753_106_18"]
UPDATE "orders" SET "total_quantity" = $1, "updated_at" = $2 WHERE "orders"."id" = 1216 [["total_quantity", 878], ["updated_at", Wed, 08 Jan 2014 11:47:40 UTC +00:00]
UPDATE "line_items" SET "created_at" = $1, "updated_at" = $2 WHERE "line_items"."id" = 108533 [["created_at", Wed, 08 Jan 2014 11:47:38 UTC +00:00], ["updated_at", Wed, 08 Jan 2014 11:47:38 UTC +00:00]
UPDATE "line_items" SET "created_at" = $1, "updated_at" = $2 WHERE "line_items"."id" = 108526[0m [["created_at", Wed, 08 Jan 2014 11:47:38 UTC +00:00], ["updated_at", Wed, 08 Jan 2014 11:47:38 UTC +00:00
:从日志问题的
class LineItem < ActiveRecord::Base
has_paper_trail :on => [:update, :destroy]
belongs_to :order
end
实施例
灿您发布“calculated_total_quantity”方法? – omarvelous
我设法通过更改工作流程来解决该问题,如下面的答案中所示。 – SteveA