С помощью exclusion
вы можете проверить значение для указанного атрибута, которое не принимает значение ни одного из них для параметра in
.
Возьмите пример модели автомобиля, где у вас есть цена, характеристики, марка и т. Д. (Не нормированы). Вы можете запретить создание автомобиля с маркой Toyota, добавить эту конкретную марку и в момент сохранения записи из-за проверки возникнет ошибка, и транзакция будет подвергнута откату.
class Car < ApplicationRecord
validates :brand, exclusion: { in: %w[hyundai toyota peugeot] }
end
car = Car.new(price: 11111, brand: 'hyundai')
car.valid? # false
car.errors.messages
# => {:brand=>["is reserved"]}
car.save
# (0.1ms) begin transaction
# (0.1ms) rollback transaction
# => false
Вы можете создать любой автомобиль, если марка не является "hyundai", "toyota" или "peugeot".
Обратите внимание, что проверка чувствительна к регистру. Разве это не тот же "Hyundai" или "Hyundai" (или любой другой).
ActiveRecordValidations#inclusion
является противоположностью исключения, он проверяет, что значение может быть любым из значений в опции in
.