我试图弄清楚是否可以编写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
方式,我有兴趣知道这可能是什么。
答案 0 :(得分:1)
有uniqueness
验证,但它会在底层执行查询。您建议的内容并不存在于开箱即用的Rails中。在创建或更新对象时,ActiveRecord中存在事件的生命周期,并且验证只是一个部分(初始化,验证,回调等等)。
您可以编写一种方法来挽救数据库唯一性约束,但老实说,我不知道您为什么要这样做。增加的复杂性是不值得的。