I'm looking for some clarification regarding the behaviour of redirect_to
.
I have this code:
if some_condition redirect_to(path_one) end redirect_to(path_two)
If some_condition == true
I get this error:
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.
It seems that the method continues to execute after the redirect_to
call. Do I need to write code like this:
if some_condition redirect_to(path_one) return end redirect_to(path_two)
redirect_to will cause any automatic rendering to be skipped. You only need the 'return' if you need to bypass further code in the action. If the further code does an explicit render , then you must do a return to avoid an error of redirect and render both being present.
In Rails 4. x, for going back to previous page we use redirect_to :back. However sometimes we get ActionController::RedirectBackError exception when HTTP_REFERER is not present. This works well when HTTP_REFERER is present and it redirects to previous page.
Yes, you need to return from method when doing redirect. It actually only adds appropriate headers for the response object.
You can write more rubyish way:
if some_condition return redirect_to(path_one) end redirect_to(path_two)
or other way:
return redirect_to(some_condition ? path_one : path_two)
or another way:
redirect_path = path_one if some_condition redirect_path = path_two end redirect_to redirect_path
From http://api.rubyonrails.org/classes/ActionController/Base.html:
If you need to redirect on the condition of something, then be sure to add “and return” to halt execution.
def do_something redirect_to(:action => "elsewhere") and return if monkeys.nil? render :action => "overthere" # won't be called if monkeys is nil end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With