mirror of
https://github.com/jbranchaud/til
synced 2026-01-20 15:38:02 +00:00
Compare commits
1 Commits
bd54b7209e
...
b6659386d2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b6659386d2 |
@@ -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).
|
||||||
|
|
||||||
_1517 TILs and counting..._
|
_1516 TILs and counting..._
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -1294,7 +1294,6 @@ _1517 TILs and counting..._
|
|||||||
- [Specify How Random Array#sample Is](ruby/specify-how-random-array-sample-is.md)
|
- [Specify How Random Array#sample Is](ruby/specify-how-random-array-sample-is.md)
|
||||||
- [Split A Float Into Its Integer And Decimal](ruby/split-a-float-into-its-integer-and-decimal.md)
|
- [Split A Float Into Its Integer And Decimal](ruby/split-a-float-into-its-integer-and-decimal.md)
|
||||||
- [Squeeze Out The Extra Space](ruby/squeeze-out-the-extra-space.md)
|
- [Squeeze Out The Extra Space](ruby/squeeze-out-the-extra-space.md)
|
||||||
- [Stack Heredocs In A Method Call](ruby/stack-heredocs-in-a-method-call.md)
|
|
||||||
- [String Interpolation With Instance Variables](ruby/string-interpolation-with-instance-variables.md)
|
- [String Interpolation With Instance Variables](ruby/string-interpolation-with-instance-variables.md)
|
||||||
- [Summing Collections](ruby/summing-collections.md)
|
- [Summing Collections](ruby/summing-collections.md)
|
||||||
- [Triple Equals: The Case Equality Operator](ruby/triple-equals-the-case-equality-operator.md)
|
- [Triple Equals: The Case Equality Operator](ruby/triple-equals-the-case-equality-operator.md)
|
||||||
|
|||||||
@@ -1,37 +0,0 @@
|
|||||||
# Stack Heredocs In A Method Call
|
|
||||||
|
|
||||||
When you put a heredoc directly in a method call as an argument, it is only the
|
|
||||||
opening identifier that goes in the argument list.
|
|
||||||
|
|
||||||
That looks like this:
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
execute_in_transaction(<<~SQL)
|
|
||||||
update reading_statuses
|
|
||||||
set status = 'abandoned'
|
|
||||||
where started_at < (now() - '2 years'::interval)
|
|
||||||
and finished_at is null;
|
|
||||||
SQL
|
|
||||||
```
|
|
||||||
|
|
||||||
You might imagine then that we can put multiple heredocs in a method call. That
|
|
||||||
leads to [_stacked
|
|
||||||
heredocs_](https://www.visualmode.dev/ruby-operators/heredoc#stacked-heredocs).
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
execute_in_transaction(<<~SQL1, <<~SQL2, <<~SQL3)
|
|
||||||
update reading_statuses
|
|
||||||
set status = 'abandoned'
|
|
||||||
where started_at < (now() - '2 years'::interval)
|
|
||||||
and finished_at is null;
|
|
||||||
SQL1
|
|
||||||
insert into activity_log (name, description)
|
|
||||||
values ('abandon_books', 'Mark unread books as abandoned');
|
|
||||||
SQL2
|
|
||||||
delete from background_jobs
|
|
||||||
where id = #{job_id}; -- better to sanitize values like this
|
|
||||||
SQL3
|
|
||||||
```
|
|
||||||
|
|
||||||
Notice we terminate the body of each heredoc with its closing identifier and
|
|
||||||
immediately begin the body of the next one.
|
|
||||||
Reference in New Issue
Block a user