Ruby on rails 在保存到数据库之前,如何操作回调中的十进制或整数列

Ruby 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

我有一个model
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