我想定时锁定特定记录上的更新。我使用的是acts_as_votable宝石,并且只允许每3或5分钟进行一次投票。
updated_at
每当通过更新更新记录时,该列都会获得新的时间戳记。
我试图通过验证(或更好的方法before_save
)和模型中的以下代码片段来实现此目的:
errors.add(:base, "Try again later.") if self.updated_at < (DateTime.now - 5.minutes)
但这实际上是行不通的。你们有什么主意吗?
提前致谢!
您好,请采用自定义方法进行验证,并使用field_name_was
方法从db获取先前的值。
在我们将要编写的验证中调用方法。
validate :updated_at_validation
def updated_at_validation
old_date = self.updated_at_was
if old_date > (DateTime.now - 5.minutes)
errors.add(:updated_at, "can't be changed in less than 5 minutes")
end
end
在您的控制器中
def vote
if @feature_request.update_attributes(:updated_at => DateTime.now)
@feature_request.vote_by voter: current_user, :duplicate => true
redirect_to :back
else
redirect_to feature_requests_url, alert: 'cant be changed in less than 5 minutes'
end
end
就是这样,您的自定义验证已设置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句