Разрешить nil-значения в строковом столбце, но не пустую строку при переносе Rails - PullRequest
0 голосов
/ 04 января 2019

У меня есть миграция, которая создает строковый столбец. Я хочу, чтобы мой столбец был нулевым, но я не хочу, чтобы он имел пустые строковые значения (''). Что-нибудь, что я могу включить в миграцию или модель, чтобы проверить, что если не ноль, то строка не пуста?

Спасибо! * * 1004

Ответы [ 2 ]

0 голосов
/ 04 января 2019

А как насчет пустой строки? (то есть: строка типа " " со всеми пробелами?)

Я не уверен, есть ли что-то на уровне БД, но для модели activerecord я бы использовал что-то вроде:

validates :my_column, presence: true, allow_nil: true

Эта проверка будет проверять, что строка не пуста (это предотвратит сохранение модели, если строка тоже " ", а не просто "")

https://guides.rubyonrails.org/active_record_validations.html#presence


Если вы хотите исключить "", но разрешить " ", тогда я бы использовал что-то вроде

validates :my_column, length: {minimum: 1}, allow_nil: true

Обратите внимание на разницу между использованием минимальной длины (для вызова ошибки проверки используется length) вместо присутствия (для вызова ошибки проверки используется метод blank?)

https://guides.rubyonrails.org/active_record_validations.html#length (см. Совет в руководстве по добавлению пользовательского сообщения для minimum: 1, поскольку сообщение об ошибке по умолчанию - множественное число)

0 голосов
/ 04 января 2019

Вы можете написать собственный валидатор для вашей модели:

validate :validate_not_empty_string

def validate_not_empty_string
  errors.add(:base, "String cannot be empty") if my_column == ""
end

Это не должно срабатывать для нуля, так как nil != "".

Я бы справился с этим в модели, а не при миграции.

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