我遇到了一個問題,我在模型中有非常相似的虛擬屬性。簡而言之,它們充當一些屬性的「轉換器」。下面是一些虛擬屬性的例子:如何重構重複的虛擬屬性?
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
在這種情況下,我有一個名爲「加班」和「shift_drop_cutoff」兩列。這兩列都是以秒爲單位的整數。但是,我不想在幾秒鐘內向用戶顯示這些屬性。相反,我想將它們轉換爲幾小時。因此,這是虛擬屬性的目的。
正如你所看到的,這些虛擬屬性的getter/setter幾乎是相同的。有沒有人有關於如何重構這個的提示?
非常感謝你!我會贊成,但我還沒有足夠的聲望。我是一個noob :(。 – benbartling 2014-08-28 21:22:16