Rails在编辑表单上转换百分比值

时间:2014-02-03 17:41:27

标签: ruby-on-rails ruby-on-rails-4

我的Customer模型中有以下回调和方法。

before_save :convert_commission_percentage

def convert_commission_percentage
  self.commission= commission.to_f/100.to_f
end

这允许用户输入百分比45并将其存储为.45。但是,在编辑时,此百分比的字段随后会在编辑表单上显示为.45,导致该数字在更新时再次除以100。有没有办法通过将编辑字段显示为45

来防止这种情况发生

1 个答案:

答案 0 :(得分:5)

有几个选择:

  1. 为什么存储转换后的值,为什么不存储用户输入的内容而不进行修改。 commission_percentage可能是一个更好的名字。如果您希望在应用中使用commission属性而不是commission_percentage属性,则可以使用alias_attribute :commission, :commission_percentagecommission创建别名commission_percentage

  2. 使用after_initialize回调:

    before_save :convert_commission_percentage
    
    after_initialize do 
      commission = commission.to_f * 100
    end
    
    def convert_commission_percentage
      self.commission= commission.to_f/100.to_f
    end
    
  3. 通过getter和setter:

    def commission=(value)
      write_attribute :commission, value.to_f/100
    end
    
    def commision
      read_attribute(:commission).to_f * 100
    end