验证最后一分钟内是否创建了最后一条记录

时间:2015-04-19 23:28:20

标签: ruby-on-rails

如何验证最后一分钟未创建的最后一条记录?

型号:

class Posts < ActiveRecord::Base
    validates :author_id, :presence  => true
    belongs_to :author
    before_save :check_timestamp

    def check_timestamp    
      IF last_record.created_at(<=1 minute) THEN
         DO NOT SAVE RECORD 
    end 
end

我已经有一段时间了,因为我已经选择了这个项目...不确定我是否可以做上面的事情。

*** LOCAL GEMS ***

activerecord (4.0.1, 3.2.9)
activerecord-deprecated_finders (1.0.3)
...
rails (4.0.1, 3.2.9)
railties (4.0.1, 3.2.9)

2 个答案:

答案 0 :(得分:2)

class Posts < ActiveRecord::Base
    validates :author_id, :presence  => true
    belongs_to :author
    validate :check_timestamp

    def check_timestamp    
      if Posts.last.created_at > 1.minute.ago
         errors.add(:created_at, 'Something went wront')
      end
    end 
end

答案 1 :(得分:0)

如果它是最新的记录,我不需要检查它是否是最后一条记录吗?那么为什么不检查所有记录的创建日期,看看是否有超过1分钟的限制,

class Posts < ActiveRecord::Base
    belongs_to :author

    validate :check_timestamp
    validates :author_id, presence: true

    def check_timestamp    
      if Posts.where('created_at > ?' 1.minute.ago).exist?
         errors.add(:created_at, 'Something went wront')
      end
    end
end

我担心它可能会变慢但是当我用.last方法对它进行测试时它会快得多,你可以把它自己检查一下。

当我想到它确实有用时,因为rails不会浪费时间将返回查询解析为Post对象然后检查created_at,数据库返回{{1} }或true直接。