Rails验证/范围24小时

时间:2014-12-10 18:44:26

标签: ruby-on-rails validation models

我试图对记录进行验证。如果ip_address和post_id相同,验证将检查是否无法创建记录。这很好用。

我正在尝试添加另一个条件,只有在24小时后才允许这种复制,如果是这样,允许它保存,但是所有未来的保存将再次禁用,直到24个周期结束。

到目前为止,这是我最好的尝试:

validates_uniqueness_of :ip_address, scope: :impressionable_id,
   conditions: -> {where('created_at < ?', Time.now - 24.hours)}

所以验证应该以某种方式只检查&#34;最新的&#34;它发现要进行验证的组的记录是准确的

谢谢!

1 个答案:

答案 0 :(得分:1)

为此创建一个显式验证器方法可能更容易:

class Foo < ActiveRecord::Base

  validate :ip_address_uniqueness, on: :create

  # ...

  def ip_address_uniqueness
    existing = Foo.where(impressionable_id: self.impressionable_id)
                  .where(ip_address: self.ip_address)
                  .where(created_at: Time.current.all_day)
    errors.add(:ip_address, 'cannot be used again today') if existing
  end

end