Я полагаю, что это должно сделать это:
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