在Rails模型/表中validationpresense vs null false

我正在玩Rails管理员,我发现了一些东西。

在模型中定义如下的属性,在Rails管理员中计为“必需”

validates :user, presence: true 

但是,表(模式/迁移)中定义的属性仍被视为“可选”

 t.datetime "created_at",:null => false 

我会假设这两个都是相同的,除了可能出现validation错误的级别。 我错了还是Rails管理员错误? 这两者是否确保成功保存现场所需的字段或存在差异?

添加:null => false表示这是数据库限制,即在任何情况下数据库都不允许空值。

添加presence: true是模型级别validation,因此将在将对象插入数据库之前进行。 可能存在您想要破坏这些validation的情况(例如边缘情况或在您的规范中)您可以使用:validates => false跳过validation:validates => false并且对象仍将进入数据库,具有空数据库限制,这赢了不会发生。

 t.datetime "created_at",:null => false 

告诉数据库不要接受空值。 然而, validates :user, presence: true就像告诉Rails应用程序不接受空值。 但是将它们集成起来会很好,例如:null => false也可以让它在Rails中注册以进行模型validation。