初学者 Rails ActiveRecord 中的迁移和列选项

Beginner Rails Migration & Column Options in ActiveRecord

关于 ActiveRecord table 创建中 :null 选项的快速提问。

假设我要创建一个新的 table 列 description

def change
    create_table :products do |t|
        t.string :name
        t.text :description, null: false
    end
end

如果我的模型中没有关于 description 列的任何 :presence 验证,那么 "nothing" 不应该被传递到描述列中吗?我不确定 null: false 可以做什么来阻止我不传递任何内容,因为我没有任何验证。

Rails 迁移或架构选项,如 null: false 在数据库级别(存储)上运行。如果您尝试用空的描述字段保存记录,您将收到一个数据库错误(例如由 PostgreSQL 生成)包裹在 ActiveRecord::StatementInvalid: 中。在调用 object.valid? 时,从应用程序的角度来看,该对象是有效的 (Rails)。

Rails 像 :presence 这样的验证在应用程序级别运行。在这种情况下,传递空值将创建一个对象,该对象在 valid? 上会 return false 并且您可以通过调用 object.errors. 轻松访问来自该对象的错误消息 如果不绕过验证,Rails 不允许您将这样的记录保存到数据库中。