2012-03-27 91 views
2

我在application.rb中模型Rails的验证,如果的一个条件得到满足

一切都很好此验证

validates :contact_id, :presence => true, :uniqueness => {:message => 'has an account already.'} 

,但我需要的,如果状态是“无效的”,只做到这一点的验证

例如在应用程序表中有一个名为state的字段,如果用户的应用程序的contact_id状态为“无效”,则此验证不应生效,并应让用户保存应用程序

回答

8

我相信这应该这样做:

validates :contact_id, 
    :presence => true, 
    :uniqueness => {:message => 'has an account already.'}, 
    :if => :invalid? 

def invalid? 
    state == 'invalid' 
end 

你也可以内联到:

validates :contact_id, 
    :presence => true, 
    :uniqueness => {:message => 'has an account already.'}, 
    :if => lambda{ state == 'invalid' } 

希望这有助于。

如果你要做到这一点,当状态not无效的,那么你可以做的是两种方式:

validates :contact_id, 
    :presence => true, 
    :uniqueness => {:message => 'has an account already.'}, 
    :unless => :invalid? 

或者,你可以改变它了一点,有一个有效的消息,这可能是我喜欢:

validates :contact_id, 
    :presence => true, 
    :uniqueness => {:message => 'has an account already.'}, 
    :if => :valid? 

def valid? 
    state != 'invalid' 
end 
+0

好吧,所以我很困惑,如果我需要验证才能生效,只有当以前的应用程序“不”有一个状态为无效......所以它= =! – Trace 2012-03-27 02:09:58

+0

对,因为当它不是无效的,那么你只会说状态!='无效' – 2012-03-27 21:14:38

相关问题