Rails验证除非

时间:2018-01-29 02:16:37

标签: ruby-on-rails validation

我怎样才能有多个unless语句?例如,在我的模型中,我有:

validates :email, unless: :guest?

但是如果尝试两个方法除外:

validates :email, unless: (:guest? || :skip_validation)

它不起作用。如果:guest?为false但:skip_validation为true,则验证会产生错误,需要有效的电子邮件。

我通过组合:guest?:skip_validation方法并将其传递给验证来实现它,但是如果除非:可以采用多种方法,这很奇怪吗?

1 个答案:

答案 0 :(得分:2)

因此,如果用户不是来宾或我们不想跳过验证,您希望验证电子邮件if !:guest || !:skip_validation。因此,除非条件是:

unless !(!:guest? || !:skip_validation)

使用De Morgan的法律,我们可以将其简化为:

unless :guest? && :skip_validation

所以基本上我们必须使用and而不是or