У меня возникают проблемы с пониманием логики приложения для этого кода сброса пароля, который я нашел ниже в Интернете.RAILS - Не понимаю код сброса пароля
- Пользователь получает письмо с ссылкой с некоторым кодом возврата.
- После нажатия на этом они идут на действие ниже называется сброс
- Пользователь найден в БД с помощью ссылки на код сброса.
- Форма для изменения пароля отображается и пользователь вводит новый пароль в.
Heres где я запутаться.
- Когда форма отправлена, действие вызывается снова.
- На этот раз в параметрах не будет сбросить код, поэтому пользователь не будет найден. @user = nil
- На этот раз его запрос на отправку, чтобы мы вошли в эту часть логики.
Мой вопрос - Как может этот код никогда не будет действительным, если @user = нольif @user.update_attributes(:password => params[:user][:password], :password_confirmation => params[:user][:password_confirmation])
# app/controllers/users_controller.rb
def reset
@user = User.find_by_reset_code(params[:reset_code]) unless params[:reset_code].nil?
if request.post?
if @user.update_attributes(:password => params[:user][:password], :password_confirmation => params[:user][:password_confirmation])
self.current_user = @user
@user.delete_reset_code
flash[:notice] = "Password reset successfully for #{@user.email}"
redirect_to root_url
else
render :action => :reset
end
end
end
<!-- app/views/users/reset.html.erb -->
<%= error_messages_for :user %>
<% form_for :user do |f| -%>
<p>
Pick a new password for <span><%= @user.email %></span>
</p>
<p>
<label for="password">Password</label><br />
<%= f.password_field :password %>
</p>
<p>
<label for="password">Confirm Password</label><br />
<%= f.password_field :password_confirmation %>
</p>
<p>
<%= submit_tag 'Reset' %>
</p>
<% end -%>
спасибо за хедз-ап за неправильный код, я исправил его. Итак, что происходит после того, как форма возвращается к действию сброса. @user будет нулевым. Но это используется в request.post? блок для обновления пользователя. Я не могу понять, как это когда-нибудь будет обновлять пользователя? – robodisco