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