我想知道如何自动填充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,
无论我尝试什么,我最后两行都没有“DEFAULT TIMESTAMP”。
我必须放下桌子才能使用吗?
答案 0 :(得分:1)
要在数据库中设置列的默认值,您需要使用迁移。在schema
声明中设置它不会影响数据库。以下内容应在迁移中起作用,并使这两列默认为NOW()
:
alter table(:users) do
modify(:inserted_at, :timestamp, default: fragment("NOW()"))
modify(:updated_at, :timestamp, default: fragment("NOW()"))
end