我一般都是Rails和编码的新手,而且我试图通过为交付驱动程序开发应用程序来自学。我有一个称为负载的表,其中包括毛重,皮重和净重的列。目前的方式是,驾驶员必须手动输入所有3个重量。我试图找出让应用程序计算净重的最佳方法(通过从毛重中减去皮重)并将其添加到网络列中。这会减少驱动程序造成一个简单的数学错误。我使用MySQL,有人能指出我正确的方向吗?
答案 0 :(得分:3)
我会向模型添加before_validation
回调,让我们计算缺失值。像这样:
# in your model
before_validation :calculate_net_weight
private
def calculate_net_weight
self.net_weight = gross_weight - tare_weight
end
顺便说一下。我认为将所有三个值存储在数据库中是有意义的,即使你可以从另外两个中计算出一个值。但是,在数据库中包含所有三个值可能有助于解决问题,或者可能使计算或统计更容易。
答案 1 :(得分:2)
为什么要在数据库中保留该逻辑?你可以简单地在模型中使用它。
假设你有一个负载模型
只需添加以下方法
>>> ???
[{
host: "192.168.1.4",
port: 23,
device: 'Galil DMC-4143'
}]
答案 2 :(得分:1)
我也会问为什么你必须将它存储在数据库中。如果你确实想要存储它:
您可以创建模型的before_create lifecyle hook,以便在将值保存到数据库之前计算和设置值。