Phoenix 框架 Ecto 为时间戳提供默认值

Got*_*rek 1 elixir ecto phoenix-framework

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

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

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

  timestamps(type: :utc_datetime)
end
Run Code Online (Sandbox Code Playgroud)

我试过了

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
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用或运行时未考虑更改:

mix ecto.migrate
Run Code Online (Sandbox Code Playgroud)

我的代码是错误的还是我使用了错误的命令行?

在我的 SQL 模式中,我有

newsletter  BOOLEAN DEFAULT FALSE NOT NULL,
inserted_at TIMESTAMP             NOT NULL,
updated_at  TIMESTAMP             NOT NULL,
Run Code Online (Sandbox Code Playgroud)

不管我尝试什么,最后两行都不能有“DEFAULT TIMESTAMP”。

我必须先放下桌子才能工作吗?

Dog*_*ert 5

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

alter table(:users) do
  modify(:inserted_at, :timestamp, default: fragment("NOW()"))
  modify(:updated_at, :timestamp, default: fragment("NOW()"))
end
Run Code Online (Sandbox Code Playgroud)