Skip to content

Latest commit

 

History

History
38 lines (26 loc) · 1017 Bytes

why-redirect-and-return-in-controllers.md

File metadata and controls

38 lines (26 loc) · 1017 Bytes

Why Redirect And Return In Controllers

A fairly common idiom in Rails controller actions is a redirect_to followed by an and return.

def show
  redirect_to sign_in_path and return if current_user.blank?

  book = Book.find(params[:id])

  render book
end

Because a render comes later in the controller action, we need to early return after the redirect to avoid multiple render/redirect warnings.

It is important to use and here instead of && because of logical operator precedence.

If we used && instead:

  redirect_to sign_in_path && return if current_user.blank?

The redirect_to would get nil (the result of sign_in_path && nil). If we did want to use &&, we'd need to be diligent with method call parentheses.

  redirect_to(sign_in_path) && return if current_user.blank?

In this case, redirect_to would actually get called with a path string and the return would be called after that.

source