在我的视图文件中,我有这样的代码
<%= f.text_field :family_allowance, :value => number_to_currency(10000, :format => "%u%n", :unit => "¥", precision: 0), class: "form-control", :readonly => true %>
我想在保存到db之前将字符串值转换为整数。在我的模型中,我尝试了
before_save :set_allowance_value
.
.
.
private
def set_allowance_value
this.family_allowance = (this.family_allowance.sub ",", "").to_i
true
end
这不起作用,最好的方法是什么?
答案 0 :(得分:1)
将此添加到模型应该有效。
def family_allowance=(allowance)
self[:family_allowance] = allowance.delete(',').to_i # it'll work if allowance is like "1,32,200"
# you can also use sub/gsub/tr option
end
答案 1 :(得分:1)
您可以使用write_attribute
在通过设置器更改其值时直接写入属性;
def family_allowance=(allowance)
write_attribute :family_allowance, allowance.gsub(",", "").to_i
end
由于您正在创建一个setter,因此不再需要在before_save
回调中运行您的代码。
此外,您可以使用验证中的值等...
但是,在自动假设allowance
是字符串时要小心。也许你想测试它是否首先响应gsub;
def family_allowance=(allowance)
if allowance.respond_to?(:gsub)
write_attribute :family_allowance, allowance.gsub(",", "").to_i
end
end
答案 2 :(得分:0)
def set_allowance_value
fa = self.family_allowance.split('')。map {| x | Integer(x)rescue nil} .compact.join.to_i
#if您的family_allowance值由“¥10,000”组成
self.family_allowance = fa
端