I would like to know how auto fill "updated_at" and "inserted_at" columns generated by timestamp().
The goal is to not specify these values because it has to be automatic. I know how to do with other columns.
schema "users" do
field :newsletter, :boolean, default: false
timestamps(type: :utc_datetime)
end
I have tried
schema "users" do
field :newsletter, :boolean, default: false
field :inserted_at,:utc_datetime, default: :utc_datetime
field :updated_at,:utc_datetime, default: :utc_datetime
end
But it seems it doesn't work or changes are not taken in account when I run:
mix ecto.migrate
Is my code wrong or do I use the wrong command line?
In my SQL schema I have
newsletter BOOLEAN DEFAULT FALSE NOT NULL,
inserted_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP NOT NULL,
And doesn't matter what I try, I can't have "DEFAULT TIMESTAMP" on the two last lines.
Must I drop the table before it can work?
To set a default value of the column in the database, you need to use a migration. Setting it in the schema
declaration will not affect the database. Something like the following should work in a migration and make those two columns default to NOW()
:
alter table(:users) do
modify(:inserted_at, :timestamp, default: fragment("NOW()"))
modify(:updated_at, :timestamp, default: fragment("NOW()"))
end