2014-02-03 5 views
0

У меня есть следующий обратный вызов и метод в моей модели Customer.Rails Convert Percentage Value on Edit Form

before_save :convert_commission_percentage 

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

Это позволяет пользователю ввести процентное качестве 45 и хранить его как .45. Тем не менее, при редактировании поле для этого процента затем отображается как .45 в форме редактирования, заставляя это число снова делиться на 100 при обновлении. Есть ли способ избежать этого, отображая поле редактирования как 45?

ответ

4

Есть несколько вариантов:

  1. Почему магазин преобразуется значение, то почему бы не хранить любые входные данные пользователя без изменений. commission_percentage может быть лучшим именем. Вы можете создать псевдоним commission до commission_percentage с alias_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 
    
  3. Через добытчиками и сеттеров:

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

Я думаю, что я буду с вариантом 2. Моя мысль будет легче сделать математические вычисления, если они хранятся в базе данных как '.45'. Таким образом, мне не нужно преобразовывать его каждый раз, когда я занимаюсь математикой. Мысли? Переименование атрибута не является проблемой. 'Commission_percentage' - намного лучшее имя атрибута. – ctilley79