【发布时间】:2011-01-03 21:54:38
【问题描述】:
我有一个包含许多 LoggedTimes 的任务。我想在任何一天对任务设置 8 小时的记录时间限制。解决此问题的最佳方法是什么,以便我可以检查此人最近记录的时间是否“超过了一天的总时间”,可以这么说?
这是我开始的地方(Task.rb):
validate :max_logged_daily_time
def max_logged_daily_time
if (params[:session_time] + (logged_times.where(:created_at => Date.today).to_a.sum(&:session_time)/60)) > 8
errors.add_to_base("Can't have more than 8 hours logged a day")
logged_time.errors.add('session_time', 'Logged times exceeded today')
end
end
目前此验证不起作用(在注册了 8 小时以前的记录时间后添加另一个 LoggedTime 只需将其添加到其余时间,而不是引发错误。由于没有引发错误,我正在努力选择我的解决问题的方法。是不是和params的处理有关?
这让我想到了设计问题:理论上我可以修改视图,使用户只能提交 8 小时减去他们当天登录的总时间;然而,这似乎是一个笨拙的解决方案,并且违反了在模型中保留验证的原则。 (而且它当然不能帮助我解决这个模型验证问题)。
这里有什么建议吗?
TIA
【问题讨论】:
标签: ruby-on-rails validation associations ruby-on-rails-3