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

时间:2015-07-14 11:09:26

标签: sql ruby-on-rails migration database-migration

ActiveRecord表创建中:null选项的快速提问。

我们要说我要创建一个包含description列的新表。

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

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

1 个答案:

答案 0 :(得分:2)

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

Rails验证,例如:在应用程序级别上运行。在这种情况下,传递一个空值会创建一个在valid?上返回false的对象,你可以通过调用object.errors.轻松地从对象访问错误消息。如果没有绕过验证,Rails将不允许你保存这样的记录到数据库。