sample_rails_tailwind/app/controllers/users_controller.rb
songtianlun 8bb7615cb1 fix: correct user activation and password reset logic
- Change `user.send(:activate)` to `user.activate` for clarity.
- Fix typo in email parameter from `emial` to `email` in password reset.
- Update render calls to include status codes for better error handling.
- Modify password reset email method to accept a user parameter.
- Update tests to reflect changes in password reset functionality.

These changes improve the clarity of the user activation process and
ensure that the password reset functionality works correctly with
proper error handling and user feedback.
2025-01-08 10:14:36 +08:00

84 lines
1.9 KiB
Ruby

class UsersController < ApplicationController
include SessionsHelper
before_action :logged_in_user, only: [ :index, :edit, :update, :destroy ]
before_action :correct_user, only: [ :edit, :update ]
before_action :admin_user, only: [ :destroy ]
def index
# @users = User.all
# @users = User.order(:name).page(params[:page])
@users = User.where(activated: true).page(params[:page])
end
def show
@user = User.find(params[:id])
redirect_to root_url and return unless @user.activated?
# debugger
end
def new
@user = User.new
# debugger
end
def create
@user = User.new(user_params)
if @user.save
# reset_session
# log_in @user
# flash[:success] = "Welcome to the Sample App!"
# redirect_to @user
# redirect_to user_url(@user)
@user.send_activation_email
flash[:info] = "Please check your email to activate your account."
redirect_to root_url
else
render "new", status: :unprocessable_entity
end
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update(user_params)
flash[:success] = "Profile updated"
redirect_to @user
# redirect_to user_url(@user)
else
render "edit"
end
end
def destroy
User.find(params[:id]).destroy
flash[:success] = "User deleted"
redirect_to users_url
end
private
def user_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end
def logged_in_user
unless logged_in?
store_location
flash[:danger] = "Please log in."
redirect_to login_url
end
end
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless current_user?(@user)
end
def admin_user
redirect_to(root_url) unless current_user.admin?
end
end