Получение первого аргумента в форме не может содержать nil или быть пустым при попытке разрешить пользователям редактировать свой пароль

#ruby-on-rails #devise

#ruby-on-rails #разработать

Вопрос:

Я пытаюсь добавить решение, позволяющее пользователям изменять свой пароль. Я использую devise. И я последовал третьему решению из этого руководства. Однако после того, как я все сделаю:

 class UsersController < ApplicationController

  before_action :authenticate_user!

  def edit
    @user = current_user
  end

  def update_password
    @user = current_user
    if @user.update_with_password(user_params)
      # Sign in the user by passing validation in case their password changed
      bypass_sign_in(@user)
      redirect_to root_path
    else
      render "edit"
    end
  end

  private

  def user_params
    # NOTE: Using `strong_parameters` gem
    params.require(:user).permit(:password, :password_confirmation, :current_password)
  end
end
  

в routes.rb

 resource :user, only: [:edit] do
  collection do
    patch 'update_password'
  end
end
  

и в представлении:

  <%= form_for(@user, :url => { :action => "update_password" } ) do |f| %>
   <div class="field">
    <%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br />
    <%= f.password_field :current_password %>
  </div>
  <div class="field">
    <%= f.label :password, "Password" %><br />
    <%= f.password_field :password, :autocomplete => "off"  %>
  </div>
  <div class="field">
    <%= f.label :password_confirmation %><br />
    <%= f.password_field :password_confirmation %>
  </div>
  <div class="action_container">
    <%= f.submit %>
  </div>
<% end %>
  

но я получаю эту ошибку First argument in form cannot contain nil or be empty в
= form_for(@user, :url => { :action => 'update_password' } ) do |f|

я что-то пропустил? Спасибо!

Комментарии:

1. Покажите нам журнал ВВОДА или публикации, который вы выполняете

2. когда я просто перезагружаю страницу, я получаю эту ошибку. Completed 500 Internal Server Error in 447ms , ArgumentError - First argument in form cannot contain nil or be empty:

3. О, @user не может быть nil или empty. Итак, что произойдет, если вы сделаете p @user в своем контроллере. Что вы видите?

4. @VeridianDynamics извините, но что вы имеете в виду p @user ?

5. Я просто пытаюсь узнать, что внутри @user . Скорее всего, это nil. Итак, вам нужно показать мне, что внутри, чтобы доказать это мне. У меня такое чувство, что current_user значение равно nil и, следовательно, @user равно nil, и, таким образом, сервер выдает ошибку при попытке сгенерировать HTML-разметку для вашей формы. p @user размещенный внутри вашего контроллера после назначения @user просто напечатает его в ваших журналах.