mirror of
https://github.com/jbranchaud/til
synced 2026-01-05 08:08:02 +00:00
Add Why Redirect And Return In Controllers as a Rails TIL
This commit is contained in:
@@ -10,7 +10,7 @@ pairing with smart people at Hashrocket.
|
|||||||
|
|
||||||
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
||||||
|
|
||||||
_1260 TILs and counting..._
|
_1261 TILs and counting..._
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -857,6 +857,7 @@ _1260 TILs and counting..._
|
|||||||
- [Use IRB And Ruby Flags With Rails Console](rails/use-irb-and-ruby-flags-with-rails-console.md)
|
- [Use IRB And Ruby Flags With Rails Console](rails/use-irb-and-ruby-flags-with-rails-console.md)
|
||||||
- [Verify And Read A Signed Cookie Value](rails/verify-and-read-a-signed-cookie-value.md)
|
- [Verify And Read A Signed Cookie Value](rails/verify-and-read-a-signed-cookie-value.md)
|
||||||
- [Where Am I In The Partial Iteration?](rails/where-am-i-in-the-partial-iteration.md)
|
- [Where Am I In The Partial Iteration?](rails/where-am-i-in-the-partial-iteration.md)
|
||||||
|
- [Why Redirect And Return In Controllers](rails/why-redirect-and-return-in-controllers.md)
|
||||||
- [Wipe Out All Precompiled Assets](rails/wipe-out-all-precompiled-assets.md)
|
- [Wipe Out All Precompiled Assets](rails/wipe-out-all-precompiled-assets.md)
|
||||||
- [Write Reversible Migration To Set Default](rails/write-reversible-migration-to-set-default.md)
|
- [Write Reversible Migration To Set Default](rails/write-reversible-migration-to-set-default.md)
|
||||||
- [Write Safer Where Clauses With Placeholders](rails/write-safer-where-clauses-with-placeholders.md)
|
- [Write Safer Where Clauses With Placeholders](rails/write-safer-where-clauses-with-placeholders.md)
|
||||||
|
|||||||
38
rails/why-redirect-and-return-in-controllers.md
Normal file
38
rails/why-redirect-and-return-in-controllers.md
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# Why Redirect And Return In Controllers
|
||||||
|
|
||||||
|
A fairly common idiom in Rails controller actions is a `redirect_to` followed
|
||||||
|
by an `and return`.
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
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:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
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.
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
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](https://stackoverflow.com/a/37211314/535590)
|
||||||
Reference in New Issue
Block a user