To practice my rails skills, I decided to make a website about events. It is a website mainly between organizations, who hold an event and volunteers, who join the event.
Among all the problems I encountered, I want to share the DoubleRenderError
because it bothered me for a long time and how I solve the problem.
I got this error when I tried to add some helpers method for the show
route of User
. My application_controller.rb
looks like this:
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?
flash[:error]="You have to log in first to continue your operation"
redirect_to "/login"
end
end
def correct_user?
if !(current_user.id==@user.id)
flash[:error]="You have no right to do this operation."
redirect_to "/"
end
end
end
And here’s my show
action in users_controller.rb
:
def show
log_in_first
@user = User.find_by id: params[:id]
correct_user?
if @user
render 'show'
else
redirect_to '/login'
end
end
As you can see, I tried to verify that the user is logged in and it is the correct user before a user can browse on a specific user page. So let’s say if someone’s not logged in but wants to go to the show
route, it will be redirected to the login
page when it hits the log_in_first
method, and see the error message: “You have to log in first to continue your operation”.
However, when I tested it as a not-logged-in user, I got this error:
AbstractController::DoubleRenderError (Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return".)
#ruby-on-rails #error #error-handling #ruby-on-rails-development #ruby