Во-первых, проверки не выполняются в зависимости от того, изменился атрибут или нет (если, конечно, вы не попросите об этом явно). Каждый раз, когда запись с проверкой уникальности сохраняется и проверка может быть запущена (как определено опциями :on
, :if
, :unless
), она проверяет, есть ли какие-либо экземпляры, кроме себя, со значением, которое должно быть уникальным .
Поскольку у вас есть условия для проверки, я полагаю, что вы могли бы в итоге создать два экземпляра с одинаковым номером квитанции, но оба из которых имеют ноль status_id
. Установите столбец status_id
, и проверка вступит в действие и найдет другие экземпляры.
Другое дело, что поскольку проверка выполняется при обновлении, только вы можете создать несколько экземпляров с одним и тем же номером квитанции, повторная попытка обновить запись вызовет проверку.
Я только догадываюсь о точных сценариях.