Elixir Phoenix framework EXTO为时间戳提供默认值

Elixir Phoenix framework EXTO为时间戳提供默认值,elixir,phoenix-framework,ecto,Elixir,Phoenix Framework,Ecto,我想知道如何自动填充timestamp()生成的“updated_at”和“inserted_at”列 目标是不指定这些值,因为它必须是自动的。 我知道如何处理其他专栏 schema "users" do field :newsletter, :boolean, default: false timestamps(type: :utc_datetime) end 我试过了 schema "users" do field :newsletter, :boolean, default

我想知道如何自动填充timestamp()生成的“updated_at”和“inserted_at”列

目标是不指定这些值,因为它必须是自动的。 我知道如何处理其他专栏

schema "users" do
  field :newsletter, :boolean, default: false

  timestamps(type: :utc_datetime)
end
我试过了

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
但它似乎不起作用,或者在我运行时没有考虑到更改:

mix ecto.migrate
我的代码是错误的还是使用了错误的命令行

在我的SQL模式中,我有

newsletter  BOOLEAN DEFAULT FALSE NOT NULL,
inserted_at TIMESTAMP             NOT NULL,
updated_at  TIMESTAMP             NOT NULL,
不管我怎么做,最后两行都不能有“默认时间戳”


必须先删除表才能工作吗?

要在数据库中设置列的默认值,需要使用迁移。在
模式
声明中设置它不会影响数据库。类似于以下内容的内容应该在迁移中起作用,并将这两列默认设置为
NOW()


要在数据库中设置列的默认值,需要使用迁移。在
模式
声明中设置它不会影响数据库。类似于以下内容的内容应该在迁移中起作用,并将这两列默认设置为
NOW()

alter table(:users) do
  modify(:inserted_at, :timestamp, default: fragment("NOW()"))
  modify(:updated_at, :timestamp, default: fragment("NOW()"))
end