diff --git a/README.md b/README.md index 3d0523b..12b3455 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ working across different projects via [VisualMode](https://www.visualmode.dev/). For a steady stream of TILs, [sign up for my newsletter](https://visualmode.kit.com/newsletter). -_1880 TILs and counting..._ +_1881 TILs and counting..._ See some of the other learning resources I work on: @@ -1221,6 +1221,7 @@ If you've learned something here, support my efforts writing daily TILs by - [Find Records With Multiple Associated Records](rails/find-records-with-multiple-associated-records.md) - [Flipper Discards Actors When Feature Fully Enabled](rails/flipper-discards-actors-when-feature-fully-enabled.md) - [Force All Users To Sign Out](rails/force-all-users-to-sign-out.md) +- [Format Amount As Currency](rails/format-amount-as-currency.md) - [Format DateTime With Builtin Formats](rails/format-datetime-with-builtin-formats.md) - [Format Specific html.erb Template Files](rails/format-specific-html-erb-template-files.md) - [Generate A Model](rails/generate-a-model.md) diff --git a/rails/format-amount-as-currency.md b/rails/format-amount-as-currency.md new file mode 100644 index 0000000..9b5e552 --- /dev/null +++ b/rails/format-amount-as-currency.md @@ -0,0 +1,28 @@ +# Format Amount As Currency + +I was checking various sums of dollar amounts in a Rails console recently. +However, they are returned as `BigDecimal` and display in exponential notation. + +```ruby +PaymentLink.joins(:payment).during(:last_month).sum("payments.amount") +# => 0.12345678e6 +``` + +When it comes to dollar amounts I find that notation to be hard to parse at a +glance. With Rails' help I can quickly format them as currency with the +[`number_to_currency`](https://api.rubyonrails.org/classes/ActiveSupport/NumberHelper.html#method-i-number_to_currency) +method from `ActionView`'s `NumberHelper`. + +```ruby +include ActionView::Helpers::NumberHelper +number_to_currency(PaymentLink.joins(:payment).during(:last_month).sum("payments.amount")) +# => "$123,456.78" +``` + +There are some options that can be passed to `number_to_currency` to further +customize it, like `precision`: + +```ruby +number_to_currency(PaymentLink.joins(:payment).during(:last_month).sum("payments.amount"), precision: 0) +# => "$123,457" +```