Ruby on rails 在保存到数据库之前,如何操作回调中的十进制或整数列
我有一个modelRuby on rails 在保存到数据库之前,如何操作回调中的十进制或整数列,ruby-on-rails,callback,Ruby On Rails,Callback,我有一个modelFactsheet,它有一些十进制列,用于输入一些$value(price)。我需要能够输入值,如$1000000.00,并在保存之前从中计算原始值。如果我在进行任何格式化之前进行保存,它会将其保存为1.00为“$1000000.00”。要保存,我尝试在保存前进行一次“保存前”回调,并仅从列中提取数字和点。我是这样做的: class Factsheet < ActiveRecord::Base before_save :convert_to_decimal de
Factsheet
,它有一些十进制列,用于输入一些$value(price)。我需要能够输入值,如$1000000.00
,并在保存之前从中计算原始值。如果我在进行任何格式化之前进行保存,它会将其保存为1.00
为“$1000000.00”。要保存,我尝试在保存前进行一次“保存前”回调,并仅从列中提取数字和点。我是这样做的:
class Factsheet < ActiveRecord::Base
before_save :convert_to_decimal
def convert_to_decimal
self.shopping_center_size = decimal_value(shopping_center_size)
self.cam = decimal_value(cam)
self.tax = decimal_value(tax)
#... some other manipulations
end
def decimal_value(string)
string ? string.gsub(/[^\d\.]/, "") : string
end
end
视图:
_form.html.erb
# Here user should be able to enter values like $1,000,000.00
# and it should be correctly saved to database as 1000000.0
<%= form.text_field :cam %>
<%= form.text_field :tax %>
#在这里,用户应该能够输入$1000000.00之类的值
#并且应该以1000000.0的格式正确地保存到数据库中
您可以覆盖模型中每个字段的设置方法,如下所示:
def shopping_center_size=(num)
self[:shopping_center_size] = decimal_value(num)
end
def cam=(num)
self[:cam] = decimal_value(num)
end
def tax=(num)
self[:tax] = decimal_value(num)
end
我不太明白。“$1,00,00.00”的正确“原始值”是多少?您可能在模型中有虚拟属性(如:str_-cam,:str_-tax
),并在表单中使用它来获取:cam
和:tax
的值,但您必须在视图中转换回它们,只需注释,您的输入似乎有误:$1,00,00.00您似乎缺少0$1000000。00@mosch..the$1000000.00
的正确值将是1000000.0
。@腐蚀..你是对的,我错过了0s..编辑如果Rails想要一个字符串,给它一个字符串:字符串?string.to_s.gsub(/[^\d\.]/,“”)。to_f:string
def shopping_center_size=(num)
self[:shopping_center_size] = decimal_value(num)
end
def cam=(num)
self[:cam] = decimal_value(num)
end
def tax=(num)
self[:tax] = decimal_value(num)
end