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

cti*_*y79 1 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
Run Code Online (Sandbox Code Playgroud)

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

vee*_*vee 5

有几个选择:

  1. 为什么不存储转换后的值,为什么不存储用户输入而无需修改. commission_percentage可能是一个更好的名字.你可以创建一个别名commission,以commission_percentagealias_attribute :commission, :commission_percentage如果你想使用commission的属性,而不是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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 通过getter和setter:

    def commission=(value)
      write_attribute :commission, value.to_f/100
    end
    
    def commision
      read_attribute(:commission).to_f * 100
    end
    
    Run Code Online (Sandbox Code Playgroud)