在rails中求和属性模型

时间:2016-01-19 03:10:08

标签: ruby-on-rails-4

我想在total_price

中计算medic_record
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无法强制转换为BigDecimal):   app / models / medic_record.rb:31:in&& 39; +'   app / models / medic_record.rb:31:in' save_total'

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

你应该转换为浮动每个字段以得到总和:

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

尽管如此,我无法理解为什么update_all(,因为模型中的此方法会识别数据库中的1条记录,save_total将为表的每条记录执行

答案 1 :(得分:-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

抱歉:)