Rails - Как включить валидацию условно? - PullRequest
0 голосов
/ 10 июня 2011

У меня есть модель пользователя, которая выглядит следующим образом:

class User < TwitterAuth::GenericUser

 acts_as_authentic {|c|
   c.login_field = :email
   c.validate_email_field = false
   c.validate_password_field = false
  }
end

Используются плагины TwitterAuth и Authlogic.

Я хотел бы выборочно отключить проверки c.validate_email_field = false в зависимости от того, использует ли пользователь твиттер для регистрации по обычной электронной почте.

- With email and password registration, the validations needs to be on.
-twitter does not have email or password fields, the validation needs to be off.

 When I disable validation, the authLogic user registration using email and password fails:

 unknown attribute: password_confirmation


 I tried to selectively disable validation if attribute 'twitter_id' is present.

 c.merge_validates_confirmation_of_password_field_options({:unless => :skip_password_validation?})

def skip_password_validation
  !attribute_present?('twitter_id')
end

Это не работает, потому что атрибут 'twitter_id' существует в таблице User независимо от того, используется он или нет.

Как выборочно включить проверку электронной почты и пароля? i, e Включить проверку, только если она не использует Twitter oAuth.

спасибо за вашу помощь

Ответы [ 2 ]

1 голос
/ 10 июня 2011

Я думаю, что вам, возможно, нужно взглянуть на другие методы проверки, например validates_with , предназначенные для более сложной логики проверки.После этого вы сможете проверить необходимые атрибуты в зависимости от того, что было передано.

0 голосов
/ 19 ноября 2012

Попробуй дать ValidationSkipper шанс:

https://github.com/npearson72/validation_skipper

Просто установите свои проверки и условия для модели User и пропускайте их при вызове в twitter.

...