Как сказал @Pavan в комментарии, вам нужно выполнить эту проверку условно.
Из-за опции :allow_nil
, nil
является допустимым значением;тем не менее, он все равно будет запускать тест уникальности для этого значения, если вы не добавите дополнительную проверку.
Я бы использовал следующий код:
validates :subdomain, allow_nil: true, uniqueness: true, if: -> (x) { x.subdomain.present? }
Вскоре я чувствую, что present?
хороший, читаемый способ включения этого.
С этим, я на 99% уверен, что вы также сможете покончить с опцией :allow_nil
, используя просто:
validates :subdomain, uniqueness: true, if: -> (x) { x.subdomain.present? }
Надеюсь, что это поможет - дайте мне знать, как у вас обстоят дела или если у вас есть какие-либо вопросы.
Редактирование на основе комментариев, вот пример отклонения пустых строк:
validates :subdomain, allow_nil: true, uniqueness: true, presence: true, if: :subdomain
# or
validates :subdomain, uniqueness: true, presence: true, if: :subdomain
Опять же, не думайте, что вам понадобится :allow_nil
там: я обновил условное обозначение, поэтому проверка выполняется просто на record.subdomain
, который вернет true
для пустой строки, false
для nil
.