无法在before_validation中访问未保存的子项

时间:2016-03-04 01:11:52

标签: ruby-on-rails activerecord

这是我的模特:

class Receipt < ActiveRecord::Base
  include ActiveUUID::UUID
  belongs_to :organisation
  has_many :receipt_line_items
  before_validation :calculate_total_cost  

  private

   def calculate_total_cost
     self.total_cost = self.receipt_line_items.sum(:cost)
   end
end

我已经过测试,calculate_total_cost确实在运行,但total_cost字段在我的数据库中没有变化。该字段是十进制12,2,cost中的receipt_line_items字段也是如此。

我后来发现 正在工作,但receipt_line_items会自动保存receipt,之后 calculate_total_cost。换句话说,当查询数据库的成本时,没有任何行项目被保存。

有没有办法访问未保存的子项的属性?

2 个答案:

答案 0 :(得分:0)

使用write_attribute方法,因此像write_attribute(:total_cost,self.receipt_line_items.sum(:cost))这样的方法希望这会有所帮助。

答案 1 :(得分:0)

我仍然不知道如何访问未保存的孩子,但最终我不需要。

这是一个鸡蛋情况 - 我需要孩子们得到父母的总费用,我需要孩子的父母参考。

但这是糟糕的设计。我有孩子的个人成本,我不应该将总数存储在数据库中,这是重复的信息。现在我不存储总数,只需在我需要访问时从孩子那里计算出来。