Ich versuche, einen E-Mail-Verifizierungsprozess in meiner Anwendung einzurichten, und ich erzeuge ein Token gut und E-Mails an den Benutzer, wenn sie sich anmelden. Aber wenn ich auf den Bestätigungslink klicke, werden beide if und else-Anweisungen in der 'users_controller/confirm'-Aktion ausgeführt. Ich werde zu root_path umgeleitet, aber die zwei Felder im Benutzerdatensatz werden geändert. Wenn ich find_by_token von der Rails-Konsole aus starte, wird der erwartete Benutzer zurückgegeben. Ich benutze mysql und frage mich, ob es eine Art Latenz in der Abfrage gibt, die beide ausführen würde.Rails, die if und else-Anweisungen ausführen
def confirm
if User.find_by_token(params[:token]).nil?
redirect_to root_path
else
@user = User.find_by_token(params[:token])
cookies[:auth_token] = @user.auth_token
User.skip_callbacks = true
@user.update_attribute(:token, "")
@user.update_attribute(:confirmed, 1)
User.skip_callbacks = false
reset_session
redirect_to routes_path
end
end
Das scheint extrem unwahrscheinlich. Ich würde vorschlagen, jedem Zweig der Bedingung einige Ausgaben hinzuzufügen, damit Sie sehen können, welche ausgeführt wird. – MrTheWalrus
ist dieser cut'n'pasted Code, oder hast du ihn neu eingegeben? (Ich frage mich nur, ob Sie einen Tippfehler im echten Code haben, der nicht hier ist, wenn Sie neu eingegeben haben ...) – Pavling
Einverstanden - dieser Code sollte wie erwartet funktionieren. Wenn der tatsächliche Code subtil anders ist, beachten Sie, dass der Aufruf von 'redirect_to' die Ausführung der Aktion nicht stoppt - Sie müssen danach zurückkehren, um dies zu erzwingen. – Thilo