2016-03-04 41 views
0

這裏是我的模型:無法訪問未保存的兒童before_validation

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,receipt_line_items中的cost字段也是如此。

我後來發現,它工作,但receipt_line_items獲得與receipt,果然自動的保存是calculate_total_cost。換句話說,當查詢數據庫的成本時,沒有任何訂單項會被保存。

有沒有辦法訪問未保存的孩子的屬性?

回答

0

使用write_attribute方法,所以像write_attribute(:total_cost,self.receipt_line_items.sum(:cost))希望這可以幫助。

0

我仍然不知道如何訪問未保存的孩子,但最終我並不需要。

這是一個雞蛋情況 - 我需要孩子們得到父母的總費用,我需要父母給孩子們參考。

但這是糟糕的設計。我有孩子的個人成本,我也不應該把總數存入數據庫,這是重複的信息。現在我不存儲總數,只需在需要訪問時從孩子們計算出來。