2016-03-04 4 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, а также поле cost в receipt_line_items.

позже я узнал, что это является работает, но receipt_line_items спасаются автомагически с receipt, который оказывается послеcalculate_total_cost. Другими словами, ни одна из позиций не сохраняется, когда db запрашивается для их затрат.

Есть ли способ доступа к несохраненным атрибутам детей?

ответ

0

использовать метод write_attribute так что-то вроде write_attribute(:total_cost,self.receipt_line_items.sum(:cost)) надеюсь, что это поможет.

0

Я до сих пор не знаю, как получить доступ к несохраненным детям, но в конце концов мне не нужно было.

Это была ситуация с куриным яйцом - мне нужны были дети, чтобы получить общую стоимость для родителя, и мне нужен был родитель, чтобы дети могли ссылаться.

Но это был плохая конструкция. У меня есть индивидуальные затраты на детей, я не должен хранить общее количество в базе данных, это дублирует информацию. Теперь я не сохраняю общее количество и просто рассчитываю его у детей, когда мне нужно получить к нему доступ.

Смежные вопросы