Ruby on rails 将数据库约束转换为Rails验证

Ruby on rails 将数据库约束转换为Rails验证,ruby-on-rails,validation,constraints,rails-activerecord,Ruby On Rails,Validation,Constraints,Rails Activerecord,在Rails应用程序中,列名、类型和默认值直接从数据库推断。是否有任何方法可以在初始化时或试图保存时从数据库约束推断验证 这将允许更多的干燥,并确保在命中数据库并获得异常之前,所有数据都可以被柔和地验证,因为验证将覆盖所有数据库约束。数据库的约束是使用数据无效信息的权威来源 或者,是否可以使ActiveRecordrescue避免命中数据库约束,并像弱验证失败一样进行操作?这意味着可以在不重新启动或编辑Rails应用程序的情况下从外部操纵数据库约束,性能将得到提高,因为唯一性验证不需要单独的查询

在Rails应用程序中,列名、类型和默认值直接从数据库推断。是否有任何方法可以在初始化时或试图保存时从数据库约束推断验证

这将允许更多的干燥,并确保在命中数据库并获得异常之前,所有数据都可以被柔和地验证,因为验证将覆盖所有数据库约束。数据库的约束是使用数据无效信息的权威来源


或者,是否可以使
ActiveRecord
rescue避免命中数据库约束,并像弱验证失败一样进行操作?这意味着可以在不重新启动或编辑Rails应用程序的情况下从外部操纵数据库约束,性能将得到提高,因为唯一性验证不需要单独的查询,而且唯一性验证将不受竞争条件的影响。

您可以使用Enforce Schema Rules gem:

它根据您在模式中已经创建的数据库规则验证您的模型

例如:

class Person < ActiveRecord::Base
  enforce_schema_rules :except => :dhh
end
class-Person:dhh
结束

回答得好!我还没有尝试过,但是gem看起来非常简单、有效并且源代码简单,它将schema.rb转换为验证,但没有检查数据库。对于我的用例来说,与一个一直在随意更改模式的人共享一个DB是不太有效的,但将来肯定会使用。