我有一张表格,上面有一个手机/手机号码和一个家庭电话号码。
如果手机号码留空了,我想只验证手机/手机号码的存在,反之亦然。
我目前对这些字段的验证如下所示。
validates_presence_of :mobile_number
validates_presence_of :home_phone
validates_length_of :home_phone, :minimum => 12, :maximum => 12
validates_length_of :mobile_number, :minimum => 10, :maximum => 10, :allow_blank => true
validates_format_of :home_phone, :with => /\A[0-9]{2}\s[0-9]{4}\s[0-9]{4}/, :message => "format should be 02 9999 9999"我想我可以像下面这样做,但不确定具体怎么做。
validates_presence_of :mobile_number, :unless => :home_phone.blank?我使用的是Rails3。
发布于 2011-06-08 10:01:47
你不需要lambda。这样就可以了:
validates_presence_of :mobile_number, :unless => :home_phone?此外,所有的验证器都采用相同的if/ all选项,因此您可以随意将其设置为有条件的。
更新:几天后回顾这个答案,我发现我应该解释为什么它是有效的:
:unless选项设置为符号,Rails将查找同名的实例方法,在验证时在被验证的实例上调用该方法,并且仅在该方法返回时才执行验证。Rails会自动为模型的每个属性创建问号方法,因此如果模型的表中存在home_phone列,Rails就会创建一个方便的#home_phone?方法。当且仅当home_phone存在(即不为空)时,此方法返回true。如果home_phone属性为nil、空字符串或一堆空格,home_phone?将返回false。更新:确认这项旧技术继续在Rails5中工作。
发布于 2011-06-08 09:25:29
您必须使用lambda / Proc对象:
validates_presence_of :mobile_number, :unless => lambda { self.home_phone.blank? }发布于 2017-11-08 01:13:46
从Rails4开始,您可以将一个块传递给presence。简明扼要:
validates :mobile_number, presence: {unless: :home_phone?}此外,对于nil或空,:home_phone?将返回false。
https://stackoverflow.com/questions/6273289
复制相似问题