【发布时间】:2020-03-28 10:57:36
【问题描述】:
我今天尝试为用户控制器使用一些辅助方法时遇到此错误:
AbstractController::DoubleRenderError(在此操作中多次调用渲染和/或重定向。请注意,您只能调用渲染或重定向,并且 每个动作最多一次。另请注意,重定向和渲染都不会终止操作的执行,因此如果要在重定向后退出操作,则需要 做一些类似“redirect_to(...) and return”的事情。)
我将以下助手放在application_controller.rb 中:
class ApplicationController < ActionController::Base
def current_user
User.find_by :id=>session[:user_id]
end
def log_in?
!!session[:user_id]
end
def log_in_first
if !log_in?
session[:error]="You have to log in first to continue your operation"
redirect_to("/login") and return
end
end
def correct_user?
if !(current_user.id.to_s==params[:id])
session[:error]="You have no right to do this operation."
redirect_to "/"
return
end
end
end
这里是user_controller.rb:
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
session[:user_id]=@user.id
redirect_to user_path(@user)
else
render 'new'
end
end
def show
log_in_first
@user = User.find_by id: params[:id]
correct_user?
if @user
render 'show'
else
redirect_to '/login'
end
end
private
def user_params
params.require(:user).permit(:name,:password,:email,:email_confirmation)
end
end
如您所见,我尝试在log_in_first 和correct_user? 中同时使用return 和and return 来解决问题,但它仍然不起作用。有人有什么想法吗?
【问题讨论】:
-
为用户控制器添加代码。
-
@dbugger 我只是添加了 userscontroller 文件。谢谢!
标签: ruby-on-rails activerecord error-handling