我有一个包含大量字段的表单,这些字段以小数形式存储在我的数据库中。
但是,我希望用户能够输入分数,特别是混合数字(例如 38 1/2)
这个答案为将混合数字转换为分数提供了一个很好的解决方案,我已经对其进行了修改并将其放入我的模型中的一个函数中:
def to_dec
self.chest = self.chest.split.map { |r| Rational(r) }.inject(:+).to_f
end
我已经尝试用validate :to_dec
and来调用它before_save :to_dec
。但是,这些都不起作用。
我知道为什么,但不知道如何解决它。
通过使用puts self.chest
,在我有机会调整如何完成之前,我可以知道该值正在转换为数字。在我的表单中输入“10 1/2”并保存,puts self.chest
即使函数只是:
def to_dec
puts self.chest
end
另外,puts '38 1/2'.split.map { |r| Rational(r) }.inject(:+).to_d
给了我 38.5,所以我知道问题不在于转换。
我已将视图输入类型从数字更改为字符串,但我的模型中似乎仍然有一个数字。
我被困住了。
此外,其他一些字段也需要支持混合数字——我想以某种方式将其抽象出来,这样我就不需要为每个值编写不同的函数。