The Rails migration DSL comes with the
t.timestamps
method. This allows you to add the created_at
and updated_at
timestamp
columns that are standard for most models in Rails apps.
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
) 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
.
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.