保存Rails 4之前编辑值

时间:2016-07-16 05:52:31

标签: ruby-on-rails

在我的视图文件中,我有这样的代码

<%= 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

这不起作用,最好的方法是什么?

3 个答案:

答案 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