首页 > 解决方案 > 如何在 Rails 中使用带有 before_save 的计算列

问题描述

假设我有一个带有length:decimal,height:decimaldepth:decimal列的 Order 模型。我有一个计算体积的模型方法:

def volume
  length * height * depth
end

我有另一种计算 special_volume 的方法:

def special_volume
  volume * 2.43
end

假设我现在需要将这个计算字段保存在数据库中,所以我创建了 volume:decimal 和special_volume:decimalcolumn。

我重构我的代码以使用 before_save ,如下所示:

before_save do
  self.volume = set_volume
  self.special_volume = set_special_volume
end

private
  def set_volume
    length * height * depth
  end

  def set_special_volume
    volume * 2.43
  end

问题是在 set_special_volume 方法中,volume 或 self.volume 为 nil,因为它仍未保存。

如何在 Rails 中处理该用例?我需要 before_save 吗?

标签: ruby-on-railsbefore-save

解决方案


推荐阅读