我试图对记录进行验证。如果ip_address和post_id相同,验证将检查是否无法创建记录。这很好用。
我正在尝试添加另一个条件,只有在24小时后才允许这种复制,如果是这样,允许它保存,但是所有未来的保存将再次禁用,直到24个周期结束。
到目前为止,这是我最好的尝试:
validates_uniqueness_of :ip_address, scope: :impressionable_id,
conditions: -> {where('created_at < ?', Time.now - 24.hours)}
所以验证应该以某种方式只检查&#34;最新的&#34;它发现要进行验证的组的记录是准确的
谢谢!
答案 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