Active Record Validations 5 Conditional Validation 条件校验

version: Rails 4.1

 
5. 条件校验
 
有时当被给予的断言是满足条件的,才能去校验这个对象。你可以通过使用 :if 和 :unless 选项来实现,后面跟着的是一个标志,一个字符串,一段代码或者一个数组。当你想要执行校验时,你可以使用 :if 选项。当你想要不让校验发生时,那么你可以使用 :unless 选项。
 
5.1 Using a Symbol with :if and :unless 使用一个标志通过 :if 和 :unless
你可以把 :if 和 :unless 选项关联到一个标志,来对应到一个方法名,然后可以在校验之前来调用该方法。这是该选项应用的最多的情况。
 
class Order < ActiveRecord::Base
  validates :card_number, presence: true, if: :paid_with_card?
 
  def paid_with_card?
    payment_type == "card"
  end
end
5.2 Using a String with :if and :unless 使用一个字符串通过 :if 和 :unless
你同样也能够使用一个字符串, 使用 eval 来执行校验, 其中需要包含有效的 Ruby 代码. 当字符串是一个真正的简短条件, 你应该只要使用这个选项.
class   Person < ActiveRecord::Base
   validates  :surname , presence:  true ,  if :  "name.nil?"
end
5.3 Using a Proc with :if and :unless 使用一段代码, 通过 :if 和 :unless
最后, 可能通过 :if 和 :unless 后跟着一段被调用的代码对象. 使用一个代码对象来给予你编写内部条件的能力, 来替代一个单独的方法. 这个选项最好是用一行代码来解决.
class   Account < ActiveRecord::Base
   validates  :password , confirmation:  true ,
     unless :  Proc . new   { |a| a.password.blank? }
end
5.4 Grouping Conditional validations 分组条件的校验
有时候使用一个条件来进行多个校验是非常有用的, 使用 with_options 可以简单地来实现.
class User < ActiveRecord::Base
  with_options if: :is_admin? do |admin|
    admin.validates :password, length: { minimum: 10 }
    admin.validates :email, presence: true
  end
end

在 with_options 代码块里所有的校验都会自动地传入条件 if: :is_admin?

 
5.5 Combining Validation Conditions 结合校验的条件
另一方面, 当多个条件定义是否让一个校验发生, 一个数组(Array)能够被用到. 你能够在同一个校验中同时调用 :if 和 :unless.
class Computer < ActiveRecord::Base
  validates :mouse, presence: true,
                    if: ["market.retail?", :desktop?]
                    unless: Proc.new { |c| c.trackpad.present? }
end

当所有的 :if 条件为true 和没有 :unless条件为true的情况下, 校验才能执行.

 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值