ActiveRecord表创建中:null
选项的快速提问。
我们要说我要创建一个包含description
列的新表。
def change
create_table :products do |t|
t.string :name
t.text :description, null: false
end
end
如果我的模型中没有关于:presence
列的任何description
验证,那么不应该没有"什么都没有"能够被传递到描述栏吗?我不确定null: false
可以做些什么来阻止我不通过,因为我没有进行任何验证。
答案 0 :(得分:2)
Rails迁移或模式选项(如null: false
)在数据库级别(存储)上运行。如果您尝试使用空描述字段保存记录,则会收到包含在ActiveRecord::StatementInvalid:
中的数据库错误(例如,由PostgreSQL生成)。在调用object.valid?
时,对象从应用程序的角度来看是有效的(Rails)。
Rails验证,例如:在应用程序级别上运行。在这种情况下,传递一个空值会创建一个在valid?
上返回false的对象,你可以通过调用object.errors.
轻松地从对象访问错误消息。如果没有绕过验证,Rails将不允许你保存这样的记录到数据库。