我的项目中有以下文件:
迁移:
create_table :stores do |t|
t.string :slug, null: false, index: { unique: true }
t.string :name, null: false, index: { unique: true }
t.text :description, null: false
t.timestamps
end
模型:
class Store < ApplicationRecord
validates :slug,
presence: true,
uniqueness: true,
length: { minimum: 2, maximum: 36 },
allow_blank: false
validates :name,
presence: true,
uniqueness: true,
length: { minimum: 2, maximum: 64 },
allow_blank: false
validates :description,
presence: true,
length: { minimum: 0, maximum: 1024 },
allow_blank: true
end
当我运行rails c
并执行以下代码行时:
Store.new(slug: 'blah', name: 'Blah').valid?
// returns true
它返回true,但是当我尝试保存它时
Store.new(slug: 'blah', name: 'Blah').save
// fails to save, NOT_NULL constraint failed
由于NOT_NULL constraint
错误,无法保存。
[valid?
为什么不返回false
,如果没有description
字段并且存在需要在模型上进行验证的验证?
Ruby版本:2.7.0Rails版本:6.0.2.1
我认为您的“说明”列正在引发此数据库错误。迁移中没有描述的约束为空,而在模型验证中,您设置了允许为空。