【问题标题】:Rails custom validation one after anotherRails 自定义验证一个接一个
【发布时间】:2014-05-07 07:31:50
【问题描述】:

我有一个密码字段,可以验证 presencelength 并且两者都工作正常。但是当我提交带有空白密码字段的表单时,它会显示两个验证的错误消息。

我想要的是,如果密码为空,则不得检查 length 验证器并仅显示 presence 验证器的错误消息。只有存在密码时才会检查长度验证器。

【问题讨论】:

    标签: ruby-on-rails validation custom-validators


    【解决方案1】:

    您可以使用Object#with_optionsActiveRecord::Base#new_record?

    class User < ActiveRecord::Base
      with_options :if => :new_record? do |user|
        user.validates :password, presence: true, length: { maximum: 20 }
      end
    end  
    

    rails conditional validation

    【讨论】:

    • 感谢您的回复。如何以及在哪里使用这个with_option?我需要在模型或控制器中使用它吗?请再解释一下。
    • @Sambit 验证始终在模型中。
    • 我不知道如何使用它。上面的代码没有给我验证结果。我需要在您提供的代码中添加任何其他内容吗?
    【解决方案2】:

    连同其他验证通过这个

    :allow_blank => true
    

    例如

    validates :password, :presence => true, :length => { :maximum => 20, :allow_blank => true }
    

    【讨论】:

    • 这允许空白输入。
    • :allow_blank =&gt; true 应该在length 子句内::length =&gt; { :maximum =&gt; 20, :allow_blank =&gt; true }
    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 2016-09-26
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多