我有一个has_many :items
的订单模型。每个项目都有item.price
表示所述项目的费用。我想按照order.total_price
的顺序添加所有商品价格。现在我正在用
after_save :update_total_price, :if => "self.saved.nil? "
def update_total_price
self.total_price = Item.find(item_ids).inject(0){|sum,item| sum + (item.price * item.amount) } #amount is how many items there are
self.saved = 1
self.save if self.saved
end
我第一次输入信息时效果很好,但如果我尝试编辑订单,则total_price不会更新,因为update_total_price
没有被调用,因为self.saved不是为零。
我该怎么做才能让更新模型更新它,但不会继续无限循环调用.save
?
答案 0 :(得分:6)
为什么不让update_total_price不再保存数据。
只需在before_update中设置值:
before_save :update_total_price
def update_total_price
self.total_price = items.find(:all).inject(0){|sum,item| sum + (item.price * item.amount) }
end
答案 1 :(得分:1)
after_save :update_total_price
def update_total_price
self.total_price = find_total_price
self.save_without_callbacks
end
def find_total_price
Item.find(item_ids).inject(0){|sum,item| sum + (item.price * item.amount)
end