Destroy_with_password всегда возвращает false - PullRequest
1 голос
/ 28 февраля 2020

На основе существующего вопроса, который описывает, как запрашивать пароль для удаления учетной записи пользователя с помощью Ruby драгоценного камня Devise's destroy_with_password.

Мое действие уничтожения выглядит следующим образом это:

def destroy
  @user = User.find(current_user.id)
  if @user.destroy_with_password(user_params)
      redirect_to root_url, notice: "User deleted."
  else
      redirect_to root_url
      flash[:notice] = "Couldn't delete"
  end
end

def user_params
   params.require(:user).permit(:first_name, :last_name, :password, 
                                :password_confirmation, :current_password... (etc) )
end

и форма:

<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :delete }) do |f| %>
    <%= f.password_field :current_password, autocomplete: "off" %>
    <%= f.button :submit %>
<% end %>

Перенаправление работает, но перенаправляет, даже если введен правильный пароль без удаления учетной записи.

I run binding.pry, и @user.destroy_with_password(user_params) всегда возвращает false.

Если я открою user_params, это то, что возвращается:

<ActionController::Parameters {"current_password"=>"123456"} permitted: true>

1 Ответ

1 голос
/ 28 февраля 2020

Согласно официальным документам destroy_with_password принимает аргумент current_password, поэтому вместо передачи всего user_params просто передайте current_password, сделайте это

@user.destroy_with_password(user_params[:current_password])

Подробнее в рубидо c

Разработать :: Модели :: DatabaseAuthenticatable # destroy_with_password

Попробуйте.

...