我有一个Rails模型应该只允许每个用户每天节省/一个模型的更新一次。我有一个回调的用户和日期做查找然后添加到错误,但是这是丑陋的,感觉非轨道状。我有典型created_at / updated_at字段(和时间部分是显著/ I必须保持它)。

所以我想我既可以:

1)创建其仅仅是由(的Bleh创建和范围的日期)的另一模型属性

2)使用:范围属性,但不知得到的只是created_at的日期部分,如validates_uniqueness_of:用户,:范围=>:created_at.to_date(不工作,很明显)

3)验证,除非=> Proc.new {| O |取景器,我的现有回调匹配}(毛)

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

有不会的这些压倒性的数字,但我宁愿它是在SQL,而不是红宝石做(出于明显的可扩展性的原因)。

任何想法?有没有更好的办法?

有帮助吗?

解决方案

您也可以编写自己只会验证方法。这是相当容易。而在自定义的验证方法, date_trunc (PostgreSQL系统)可用于查找所需的时间跨度现有记录。 date_trunc也可以参数化(e.g.hour,日,周,月)。

的相反date_trunc一个简单的条件可以被用于发现冲突的记录。例如 [ “USER_ID =?AND的updated_at> =?”,self.user_id,Time.now.beginning_of_day]我想这个记录查找应该会更快,因为它可以使用索引。

其他提示

我结束了使用 conditions 选项有validates_uniqueness_of和传递拉姆达限制检查记录只是那些今天。

class AttendanceRecord < ActiveRecord::Base
  validates_uniqueness_of :user_id, conditions: { -> { where("DATE(created_at) = ?", Date.today) } }
end
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top