Rails:验证按日期划分范围的唯一性

Mat*_*ish 1 ruby scope ruby-on-rails validates-uniqueness-of

我有一个Rails模型,该模型应该只允许每个用户每天保存/更新一次模型。我有一个回调来执行按用户和日期查找,然后添加到错误中,但这很丑陋,并且感觉很不合常规。我有典型的created_at / updated_at列(并且时间部分很重要/我需要保留它)。

所以我想我可以:

1)创建另一个模型属性,该属性仅仅是创建日期和作用域的日期(无效)

2)使用:scope属性,但以某种方式仅获取created_at的日期部分,例如validates_uniqueness_of:user,:scope =>:created_at.to_date(显然无效)

3)验证,除非=> Proc.new {| o | 与我现有的回调}匹配的Finder(毛收入)

http://ar.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M000086

其中不会有绝大多数,但我希望它是用SQL而不是Ruby完成的(出于明显的可伸缩性原因)。

有什么想法吗?有没有更好的办法?

dus*_*man 5

我最终将conditions选项与一起使用validates_uniqueness_of,并将其传递给lambda,以将检查的记录限制为仅今天的记录。

class AttendanceRecord < ActiveRecord::Base
  validates_uniqueness_of :user_id, conditions: { -> { where("DATE(created_at) = ?", Date.today) } }
end
Run Code Online (Sandbox Code Playgroud)