проверка наличия не работает при запросе (.valid?), но корректно завершается неудачей при сохранении .save - PullRequest
0 голосов
/ 26 января 2020

В моем проекте есть следующие файлы:

миграция:

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.0
Rails Версия: 6.0.2.1

1 Ответ

2 голосов
/ 26 января 2020

Я думаю, что ваш столбец "description" выбрасывает эту ошибку базы данных. Существует не ненулевое ограничение в миграции для описания, тогда как в валидациях модели вы установили пустое значение. Вы можете указать значение по умолчанию (т. Е. "") Для столбца описания в процессе миграции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...