mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 15:18:01 +00:00
Add Add timestamptz Columns With The Migration DSL 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://tinyletter.com/jbranchaud).
|
||||
|
||||
_1084 TILs and counting..._
|
||||
_1085 TILs and counting..._
|
||||
|
||||
---
|
||||
|
||||
@@ -630,6 +630,7 @@ _1084 TILs and counting..._
|
||||
- [Add A Foreign Key Reference To A Table](rails/add-a-foreign-key-reference-to-a-table.md)
|
||||
- [Add A Reference Column With An Index](rails/add-a-reference-column-with-an-index.md)
|
||||
- [Add React With Webpacker To A New Rails App](rails/add-react-with-webpacker-to-a-new-rails-app.md)
|
||||
- [Add timestamptz Columns With The Migration DSL](rails/add-timestamptz-columns-with-the-migration-dsl.md)
|
||||
- [Access Secrets In A Rails 5.2 App](rails/access-secrets-in-a-rails-5-2-app.md)
|
||||
- [ActiveRecord Query For This Or That](rails/active-record-query-for-this-or-that.md)
|
||||
- [Advance The Date](rails/advance-the-date.md)
|
||||
|
||||
41
rails/add-timestamptz-columns-with-the-migration-dsl.md
Normal file
41
rails/add-timestamptz-columns-with-the-migration-dsl.md
Normal file
@@ -0,0 +1,41 @@
|
||||
# Add timestamptz Columns With The Migration DSL
|
||||
|
||||
The Rails migration DSL comes with the
|
||||
[`t.timestamps`](https://edgeapi.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#method-i-timestamps)
|
||||
method. This allows you to add the `created_at` and `updated_at` timestamp
|
||||
columns that are standard for most models in Rails apps.
|
||||
|
||||
```ruby
|
||||
create_table :posts do |t|
|
||||
t.string :title, null: false
|
||||
# ...
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
```
|
||||
|
||||
With a PostgreSQL database, this will result in a `posts` table that has
|
||||
`created_at` and `updated_at` columns that are of type `timestamp(6) without
|
||||
time zone`.
|
||||
|
||||
I'd prefer to use timestamp columns that include a time zone offset. PostgreSQL
|
||||
supports this with its [`timestamptz` (`timestamp with time
|
||||
zone`)](https://www.postgresql.org/docs/current/datatype-datetime.html) data
|
||||
type.
|
||||
|
||||
We can tell the Rails DSL to generate this type of column by abondoning the
|
||||
`t.timestamps` method and instead creating custom columns with
|
||||
[`t.column`](https://edgeapi.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#method-i-column).
|
||||
|
||||
```ruby
|
||||
create_table :posts do |t|
|
||||
t.string :title, null: false
|
||||
# ...
|
||||
|
||||
t.column :created_at, :timestamptz, null: false
|
||||
t.column :updated_at, :timestamptz, null: false
|
||||
end
|
||||
```
|
||||
|
||||
It is a little less convenient than the `t.timestamps` helper, but it is nice
|
||||
to know we can have a little more control over the data type.
|
||||
Reference in New Issue
Block a user