Wie zu trennen Kennwort ändern von form entwickeln

Ich versuche, zwei Dinge zu tun:

1) Ändern Sie die Voreinstellung "Benutzer Bearbeiten-form" - mit entwickeln - zu entfernen, "Passwort" und lassen Sie die anderen Felder aktualisiert werden, ohne ein Kennwort eingeben, das heißt, entfernen Sie die Standard-überprüfung für das Passwort.

2) Erstellen Sie ein separates Formular für Passwort ändern

Habe ich alles zu funktionieren, es gibt nur ein problem, in dem separaten Formular für die Aktualisierung Passwort, ich habe auch ein Feld für das aktuelle Passwort ein. Wenn Sie über das Formular, keine Validierung erfolgt für aktuelle Passwort, also habe ich

@user.update_attributes(params[:user]) 

zu

@user.update_with_password(params[:user])

Dieser gearbeitet, aber es hob ein weiteres Problem. Zurück in der main-form mit all den anderen details, außer Passwort, der nun fordert, "Aktuelles Passwort". Wie kann ich dies erreichen, ohne eine Validierung für das aktuelle Kennwort genannt wird, auf dem Hauptformular?

hier ist meine Registrierungen controller:

def update
  @user = User.find(current_user.id)
  if @user.update_attributes(params[:user])
    set_flash_message :notice, :updated
    # Sign in the user bypassing validation in case his password changed
    sign_in @user, :bypass => true
    redirect_to after_update_path_for(@user)
  else
    clean_up_passwords(resource)
    respond_with_navigational(resource) do
      if params[:change_password] # or flash[:change_password]
        render :change_password
      else
        render :edit
      end
    end
  end
end

Dank!

Lösung 1

Habe ich eine Lösung gefunden, um das problem (wenn auch sehr chaotisch-man):

def update
  @user = User.find(current_user.id)

  if params[:user][:password].blank?
    if @user.update_attributes(params[:user])
      set_flash_message :notice, :updated
      # Sign in the user bypassing validation in case his password changed
      sign_in @user, :bypass => true
      redirect_to after_update_path_for(@user)
    else
      respond_with_navigational(resource) do
        render :edit
      end
    end
  else
    if @user.update_with_password(params[:user])
      set_flash_message :notice, :updated
      # Sign in the user bypassing validation in case his password changed
      sign_in @user, :bypass => true
      redirect_to after_update_path_for(@user)
    else
      clean_up_passwords(resource)
      respond_with_navigational(resource) do
        render :change_password
      end
    end
  end

Lösung 2

Können Sie vorschlagen, eine bessere Lösung?

InformationsquelleAutor Jeremy Lynch | 2013-07-11
Schreibe einen Kommentar