我在玩 Rails 管理员,我注意到了一些东西。
在模型中定义如下的属性,在 Rails admin 中计为“必需”
validates :user, presence: true
但是,在表(模式/迁移)中定义如下的属性仍然算作“可选”
t.datetime "created_at",:null => false
我会假设这两者是相同的,除了可能弹出验证错误的级别。我错了还是这是 Rails 管理员错误?这两者是否都确保成功保存字段时需要此字段,还是有区别?
我在玩 Rails 管理员,我注意到了一些东西。
在模型中定义如下的属性,在 Rails admin 中计为“必需”
validates :user, presence: true
但是,在表(模式/迁移)中定义如下的属性仍然算作“可选”
t.datetime "created_at",:null => false
我会假设这两者是相同的,除了可能弹出验证错误的级别。我错了还是这是 Rails 管理员错误?这两者是否都确保成功保存字段时需要此字段,还是有区别?
添加一个:null => false
意味着这是一个数据库限制,即在任何情况下数据库都不允许空值。
添加 apresence: true
是模型级别的验证,因此将在对象插入数据库之前进行。可能存在您想要打破这些验证的情况(例如边缘情况或在您的规范中)然后您可以跳过验证使用:validates => false
并且对象仍将进入数据库,具有空数据库限制,这不会发生。
t.datetime "created_at",:null => false
告诉数据库不要接受空值。然而,validates :user, presence: true
就像告诉 Rails 应用程序不接受空值一样。但是将它们集成起来会很好,例如将 :null => false 也注册到 Rails 以进行模型验证。