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

我的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. 为什么不存储转换后的值,为什么不存储用户输入而无需修改。 commission_percentage可能是一个更好的名字。 如果您想在应用程序中使用commission属性而不是commission_percentage属性,可以使用alias_attribute :commission, :commission_percentage commissioncommission_percentage创建别名commission

  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