Ruby on Rails 验证如果一个属性为真则不能为空否则允许为空

Ruby on Rails validation if one attribute is true then cannot be blank else allow blank

我有真假问卷。如果单击 true,我希望用户给出解释。

例如:

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

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

在我的验证中,我想检查是否为 false 允许空白,如果为 true 则不允许解释为空白。

这是我迄今为止为模型验证所做的尝试:

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

问题是如果我点击 false,当回答 false 时 returns 问题中出现 "can't be blank" 错误。

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

can't be blank

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

提前致谢。

您的代码有问题。你应该使用

#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?

我最初以为是我的文本区域出现了错误,但我注意到当您 select 为 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