如果满足条件,则进行Rails验证

时间:2012-03-27 01:38:26

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

我有这个验证

 validates :contact_id, :presence => true, :uniqueness => {:message => 'has an account already.'}
application.rb模型中的

一切都很好,但如果状态为“无效”,我只需要进行此验证

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

2 个答案:

答案 0 :(得分:9)

我相信应该这样做:

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

答案 1 :(得分:4)

您是否尝试过观看此视频直播视频? http://railscasts.com/episodes/41-conditional-validations

validates :contact_id, :if => :should_validate_contactid?

def should_validate_contactid?
   Check condition
end