初学者 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 不允许您将这样的记录保存到数据库中。
关于 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 不允许您将这样的记录保存到数据库中。