"的反面是什么? if ::属性? " (Rails 4 /活动记录验证)

时间:2014-04-20 16:05:29

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

在我的验证中,我已经使用了一次像

这样的条件存在
 validates :contact_name, presence: true
 validates :contact_adress,
              presence: true, if: :contact_name?,

现在我想做相反的事情:将属性的义务置于缺少其他属性的条件下。如果我让A空,那么B必须被填充,反之亦然。

那会有用吗?

 validates :attribute_A, presence true, if:attribute_B!
 validates :attribute_B, presence true, if:attribute_A!

2 个答案:

答案 0 :(得分:1)

来自validates

的文档
  

还有一个可以与验证器一起使用的选项列表:

     

...

     

:unless - 指定要调用的方法,proc或字符串,以确定是否不应进行验证(例如unless: :skip_validationunless: Proc.new { |user| user.signup_step <= 2 })。方法,proc或字符串应返回或评估为truefalse值。

但是,在Object#present?Object#blank?的帮助下使用if:可能更为明确。

答案 1 :(得分:1)

您可以使用unless.blank?

validates :attribute_A, presence true, if: :attribute_B.blank?

validates :attribute_A, presence true, unless: :attribute_B