状态验证在询问(.valid?)时不起作用,但在.save上正确失败

问题描述 投票:0回答:1

我的项目中有以下文件:

迁移:

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

ruby-on-rails validation
1个回答
0
投票

我认为您的“说明”列正在引发此数据库错误。迁移中没有描述的约束为空,而在模型验证中,您设置了允许为空。

© www.soinside.com 2019 - 2024. All rights reserved.