我的模型(拍卖)中有两个属性(小时和天)。我对小时和天的组合有业务逻辑。例如
auction duration = days*24 + hours
我也有几个小时和天的一些基本验证:
class Auction < ActiveRecord::Base
validates :days,:presence => true, :numericality => { :greater_than_or_equal_to => 0, :only_integer => true }
validates :hours,:presence => true, :numericality => { :greater_than_or_equal_to => 0, :only_integer => true }
我想将我的业务逻辑合并到验证中,这样小时和天不能都为零。有没有办法通过 ActiveRecord 验证来做到这一点?我知道在没有 AR 验证的情况下还有其他方法可以做到这一点。现在我正在创建我的模型的一个新实例。验证上述日期和时间。然后我有一个模型方法,它“手动”进行验证,如果实例没有通过,则删除它。我知道这不是最好的方法
def compute_end_time
# assumes that days and hours are already valid
time = self.days*24 + self.hours
if time > 1
self.end_time = time.hours.from_now.utc
self.save
else
# Auction duration too short (i.e. zero)
self.delete
end
end