Уникальная проверка, основанная на наличии атрибута datetime, а не значения? - PullRequest
0 голосов
/ 18 мая 2018

Я хочу, чтобы поле было уникальным в зависимости от того, присутствует другой атрибут datetime или нет.

Что-то вроде:

validates :promo_code, uniqueness: { scope: [:archived_at] }

PASS:

promo_code = TENOFF, archived_at = null

promo_code = TENOFF, archived_at = not null

promo_code = TENOFF, archived_at = not null

FAIL:

promo_code = TENOFF, archived_at = null

promo_code = TENOFF, archived_at = null

Единственный способсделать это через пользовательский валидатор?

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Попробуйте, используйте if или unless

validates :promo_code, uniqueness: { scope: [:archived_at] }, unless: Proc.new { |o| o.archived_at.blank? }
0 голосов
/ 18 мая 2018

Вот что я делаю

  validate :unique_code, if: :code

  private

  def unique_code
    return if archived_at.present?
    if self.class.unarchived.where.not(id: id).exists?(code: code, company: company)
      errors.add :code, :invalid
      false
    end
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...