Проблема в том, что вы используете средство проверки присутствия с условием, которое проверяет значения атрибутов. Это неверно Валидатор присутствия проверяет, установлены ли эти атрибуты. Что еще хуже, вы передаете опцию if
(кстати, @Tigraine правильно сказал, что ваш синтаксис неверен), что означает, что всякий раз, когда этот метод возвращает true, присутствие вообще не проверяется. Как вы настроили, валидатор будет работать только тогда, когда one
равно 1, а two
равно 0. В противном случае проверки вообще не выполняются! Я думаю, что лучший вариант здесь - написать пользовательскую проверку:
validates :one_and_two
def one_and_two
errors.add(:base, "one must be 1 and two must be 0") if !(one == 0 && two == 1)
end
Это добавит ошибку в модель с указанным сообщением, если условие вернет true. (Примечание: мне все еще не ясно, какое условие является действительным, а какое недействительным, поэтому смело меняйте эту последнюю часть в соответствии с вашими потребностями.)