Mam aplikację połączoną z zewnętrznym forum vbulletin.
W modelu user stworzyłem custom validator (sprawdza czy w bazie forum jest taki email badz username):
[code=ruby]validate :check_if_forum_user_exists
def check_if_forum_user_exists
if Vbuser.find_by_email(email.downcase)
errors.add(:email, “error 1”)
end
if !Vbuser.find(:all, conditions: [“lower(username) = lower(?)”,name]).empty?
errors.add(:name, “error 2”)
end
end[/code]
Moja funkcjonalnosc resetowania hasla jest bardzo prosta. W ostatnim kroku, użytkownik w formularzy wpisuje password i password_confirmation, które zapisywane są w params[:user].
W kontrolerze chcę to zapisać (to jest funkcjonalność z has_secure_password), czyli robię @user.update_attributes(params[:user]). Wszystkie validatory kończą się sukcesem, poza tym jednym który wrzuciłem wyżej. On się odpala i wyrzuca ten “error 1”. Problem jest z tym, że każdy użytkownik ma konto również na forum, więc bez sensu gdybym użytkownik nie mógł zresetować hasła z tego powodu.
Wiecie może jak to obejść? W ogóle nie rozumiem dlaczego to się uruchamia, a na przykład takie standardowe uniqueness dla name czy email już nie. Czy to w validatorze powinienem jakas taka kontrole zrobic, czy np. email albo username byl zmieniany?