#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
просто напечатает его в ваших журналах.