这是我的模特:
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
。换句话说,当查询数据库的成本时,没有任何行项目被保存。
有没有办法访问未保存的子项的属性?
答案 0 :(得分:0)
使用write_attribute
方法,因此像write_attribute(:total_cost,self.receipt_line_items.sum(:cost))
这样的方法希望这会有所帮助。
答案 1 :(得分:0)
我仍然不知道如何访问未保存的孩子,但最终我不需要。
这是一个鸡蛋情况 - 我需要孩子们得到父母的总费用,我需要孩子的父母参考。
但这是糟糕的设计。我有孩子的个人成本,我不应该将总数存储在数据库中,这是重复的信息。现在我不存储总数,只需在我需要访问时从孩子那里计算出来。