【发布时间】:2019-11-09 08:28:23
【问题描述】:
在我的应用中,当用户登录时,他/她会被重定向到用户个人资料页面。假设他/她被重定向到http://localhost:3000/users/1
如果他/她用任何其他号码替换 1,我希望他们重定向到那里 当前配置文件,无论用户是否在数据库中退出
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by_email(params[:email])
if user && user.authenticate(params[:password])
log_in user
redirect_to user
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end
def destroy
@current_user = nil
reset_session
redirect_to root_path
end
结束
用户控制器:
class UsersController < ApplicationController
before_action :logged_in_user, only: [:new, :show, :edit, :update]
before_action :correct_user, only: [:new, :show, :edit, :update]
def index
@users = User.all
end
def new
@user = User.new
end
def create
@user = User.new(set_params)
if @user.save
redirect_to new_sessions_path
else
render 'new'
end
end
def show
@user = User.find(params[:id])
@posts = @user.posts
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update(update_params)
redirect_to @user
else
render 'edit'
end
end
private
def set_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
def update_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless current_user?(@user)
end
end
当前如果用户在搜索栏中输入 localhost:3000/users/5 并且 ID 为 5 的用户在数据库中不存在,则会显示错误
ActiveRecord::RecordNotFound in UsersController#show 找不到 'id'=3 的用户
但我想简单地重定向到当前登录的用户个人资料页面。
如果用户在搜索栏中键入 localhost:3000/users/3 并且具有此 ID 的用户存在于 db 中,则当前它显示一个错误,即 firefox 无法处理此请求,但我希望它重定向到其默认页面,即,用户的个人资料页面。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-5.2 ruby-on-rails-6