Ich hatte genau das gleiche Problem und dies ist die Lösung, die ich gefunden habe und glaube mir, dass es funktioniert. Was ich getan habe, ist eine zweite user_params
Methode zu erstellen und sie user_params_no_pass
trotzdem zu benennen. Schauen Sie hier: Was hier passiert, ist, dass der Administrator ein Passwort bereitstellt, wenn das Passwort aktualisiert werden muss, andernfalls lassen Sie das Passwort leer. Wenn das Passwort leer user_params_no_pass
ist, wird das Passwort anderweitig verwendet user_params
. Ich hoffe das hilft
def update
if @user.valid_password?(params[:user][:password])
respond_to do |format|
if @user.update(user_params)
format.html { redirect_to @user, notice: 'User profile was successfully updated.' }
format.json { render :show, status: :ok, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
else
respond_to do |format|
if @user.update(user_params_no_pass)
format.html { redirect_to @user, notice: 'User profile was successfully updated without password.' }
format.json { render :show, status: :ok, location: @user }
else
format.html { render :edit }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
end
def destroy
@user.destroy
respond_to do |format|
format.html { redirect_to users_url, notice: 'User was successfully destroyed.' }
format.json { head :no_content }
end
end
private
def set_user
@user = User.find(params[:id])
end
def user_params
params.require(:user).permit(:user_name, :first_name, :middle_name, :last_name, :dob, :gender, :race, :hispanic, :leader, :mentor, :student, :email, :organization_id, :password, :opus,
:release_date, :days_to_release, :current_level, :is_active)
end
def user_params_no_pass
params.require(:user).permit(:user_name, :first_name, :middle_name, :last_name, :dob, :gender, :race, :hispanic, :leader, :mentor, :student, :email, :organization_id, :opus,
:release_date, :days_to_release, :current_level, :is_active)
end
Devise::RegistrationsController
s nicht zu überschreiben . Man kann sich den Wiki-Verlauf für frühere Versionen ansehen , aber seinen Rat berücksichtigen.