2016-01-19 4 views
-1

Я хочу, чтобы вычислить total_price в medic_recordSum атрибутов модели в рельсах

total_price = med_show + lab_price + total_room 

schema.rb

create_table "medic_records", force: :cascade do |t| 
    t.decimal "lab_price" 
    t.decimal "med_show" 
    t.decimal "total_price" 
    t.decimal "total_room" 
    t.datetime "created_at",      null: false 
    t.datetime "updated_at",      null: false 
    end 

Мой метод в medic_record модели

before_save :save_total 

def save_total 
    self.update_all(total_price: self.med_show + self.lab_price + self.total_room) 
end 

Но я получил эту ошибку:

TypeError (nil can't be coerced into BigDecimal): app/models/medic_record.rb:31:in '+' app/models/medic_record.rb:31:in 'save_total'

Как это исправить?

+0

Пожалуйста, разместите свое изменение как ответ. Я бы посоветовал не вводить столбцы, как 'total_price' в вашей базе данных. – Alik

+0

Увы, извините. Я двигаю своим ответом :) – Sakti

ответ

-1

решаемые

О человек, у меня есть попробовать этот метод и исправить !!

def save_total 
    self.total_price = self.med_show.to_s.to_d + self.lab_price.to_s.to_d + self.total_room.to_s.to_d 
end 

К сожалению :)

0

Вы должны преобразовать плавать каждое поле, чтобы сделать сумму:

def save_total 
    total_price=med_show.to_f+lab_price.to_f+total_room.to_f 
end 

Eventhough, я не могу понять, почему update_all(, так как этот метод в модели идентифицирует 1 запись в базе данных, save_total будет выполнена для каждой записи таблицы

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