2

我有一个订单模型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 不是 nil。

我该怎么做才能更新模型将更新它,但不会继续进行无限循环调用.save

4

2 回答 2

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
于 2010-08-18T07:03:10.247 回答
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
于 2010-08-18T07:04:55.017 回答