Проверка Rails, если условие выполнено - PullRequest
3 голосов
/ 27 марта 2012

У меня есть подтверждение

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

в приложении .rb модель

Все хорошо, но мне нужно выполнить эту проверку только в том случае, если состояние «недействительно»

Например, в таблице приложений есть поле с именем state, и если есть приложение с пользователем contact_id и состояние «недействительно», то эта проверка не должна вступать в силу и должна позволять пользователю сохранить заявку

Ответы [ 2 ]

9 голосов
/ 27 марта 2012

Я полагаю, что это должно сделать это:

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
4 голосов
/ 27 марта 2012

Вы пытались посмотреть это видео с Railscasts? http://railscasts.com/episodes/41-conditional-validations

validates :contact_id, :if => :should_validate_contactid?

def should_validate_contactid?
   Check condition
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...