如果不查询db表,则验证不存在其他记录

时间:2016-01-02 19:47:58

标签: ruby-on-rails validation activerecord

我试图弄清楚是否可以编写rails activerecord验证,验证此新记录将是db表中的第一个也是唯一的记录 WITHOUT 验证中对数据库的附加查询。

class Foo < ActiveRecord::Base      
  validate :first_and_only_foo?
  validates :name, uniqueness: true

  def first_and_only_foo?
    errors.add(:base, "another foo already exists") if something_that_doesnt_query_db
  end
end

这样做^在验证中没有任何这个......

MyTable.first.present?

有什么想法吗?

我已经阅读docs on validations(也许我错过了一些内容),但我没有看到任何与此用例有关的内容。

如果有validates :name方式,我有兴趣知道这可能是什么。

1 个答案:

答案 0 :(得分:1)

uniqueness验证,但它会在底层执行查询。您建议的内容并不存在于开箱即用的Rails中。在创建或更新对象时,ActiveRecord中存在事件的生命周期,并且验证只是一个部分(初始化,验证,回调等等)。

您可以编写一种方法来挽救数据库唯一性约束,但老实说,我不知道您为什么要这样做。增加的复杂性是不值得的。