我遇到了一个问题,我在非常相似的模型中具有虚拟属性。简而言之,它们充当某些属性的“转换器”。以下是其中一些虚拟属性的示例:
class Setting < ActiveRecord::Base
validates :overtime, presence: true, numericality: { greater_than_or_equal_to: 0 }
validates :shift_drop_cut_off, presence: true, numericality: { greater_than_or_equal_to: 0 }
def overtime_hrs
return 0 unless self.overtime.present?
(self.overtime / 3600)
end
def overtime_hrs=(overtime_hrs)
return 0 unless overtime_hrs.present?
self.overtime = overtime_hrs.to_i * 3600
end
def shift_drop_cut_off_hrs
return 0 unless self.shift_drop_cut_off.present?
(self.shift_drop_cut_off / 3600)
end
def shift_drop_cut_off_hrs=(shift_drop_cut_off_hrs)
return 0 unless shift_drop_cut_off_hrs.present?
self.shift_drop_cut_off = shift_drop_cut_off_hrs.to_i * 3600
end
end
在这种情况下,我有两列名为“overtime”和“shift_drop_cutoff”。这两列都是整数,以秒为单位表示时间。但是,我不想在几秒钟内向用户显示这些属性。相反,我想将它们转换为小时。因此,这就是虚拟属性的目的。
如您所见,这些虚拟属性 getter/setter 几乎相同。有没有人有关于我如何重构这个的提示?