Проверка Ruby on Rails, если один атрибут имеет значение true, тогда не может быть пустым, иначе можно оставить пустым - PullRequest
0 голосов
/ 21 мая 2018

У меня есть истинная и ложная анкета.Я хотел бы, чтобы пользователь дал объяснение, если нажать кнопку true.

Например:

Do you like pineapple in your pizza?
(0)True  ( )False

If true, please explain:
______________________________
|                            |
|                            |
|                            |
|                            |
------------------------------

При проверке я хотел бы проверить, является ли false допустимым пустым и является ли оно истинным, чтобы не дать объяснению быть пустым.

Это то, что я до сих пор пробовал для проверки моей модели:

validates_presence_of :is_pinnapple_pizza
validates :pinnapple_pizza_explanation, presence: {if: :is_pinnapple_pizza?}

Проблема в том, что, если я нажимаю false, он возвращает ошибку «не может быть пустым» в вопросе при ответе false.

Do you like pineapple in your pizza?
( )True  (0)False

can't be blank

If true, please explain:
______________________________
|                            |
|                            |
|                            |
|                            |
------------------------------

Заранее спасибо.

Ответы [ 2 ]

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

Сначала я подумал, что моя текстовая область выдала ошибку, но я заметил, что переключатели вызывали проблемы, когда вы выбираете false.Вместо этого я добавил свою собственную проверку, и она работает

validate :validate_pizza
validates :pinnapple_pizza_explanation, presence: {if: :is_pinnapple_pizza?}
private

def validate_pizza
    if is_pinnapple_pizza.nil?
         errors.add(:is_pinnapple_pizza, "PLEASE SELECT YES OR NO")
    end
end
0 голосов
/ 21 мая 2018

Что-то не так с вашим кодом.Вы должны использовать

#use inclusion to validate boolean field, because false.blank? => true
validates :is_pinnaple_pizza, inclusion: { in: [true, false] }
validates :pinnapple_pizza_explanation, presence: true, if: :is_pinnapple_pizza?
...