【问题标题】:Rails validates unlessRails 验证,除非
【发布时间】:2018-01-29 02:16:37
【问题描述】:

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

validates :email, unless: :guest?

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

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

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

我通过组合 :guest?:skip_validation 方法并将其传递给验证来使其工作,但很好奇除非:可以采用多种方法吗?

【问题讨论】:

    标签: ruby-on-rails validation


    【解决方案1】:

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

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

    使用德摩根定律,我们可以将其简化为:

    unless :guest? && :skip_validation
    

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

    【讨论】:

    • 太棒了。我仍然很难解决它。 (:guest? || :skip_validation) 如果其中一个为真,则不会返回真,因此除非语句为真并且跳过验证吗?任何见解将不胜感激。
    • unless x 基本上等同于if !x,因此if !:guest && !:skip_validation(您的unless 表达式已重写)总是需要对客人进行验证,因此该表达式不正确。试图解释对我来说也很困惑!像this one 这样的页面建议像你一样做,制作你自己的方法来测试这两种条件,这使得写作时变得更容易,更重要的是当你几个月后回来想知道你到底想做什么时!跨度>
    • 谢谢!非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 2013-08-24
    相关资源
    最近更新 更多