现在不推荐使用Ecto.Model.Callbacks。
我正在努力实现与before_insert
相同的行为,但无济于事!我甚至无法在IO.puts("hello")
内触发changeset/2
。
这就是我所拥有的:
def changeset(model, params \\ :empty) do
IO.puts "HELLO" # never prints
model
|> cast(params, @required_fields, @optional_fields)
|> put_change(:column_name, "hello")
end
我尝试了put_change
,change
以及几乎Ecto.Changeset中的所有其他内容,而不是cast
。
我也尝试了非管道方法,以防万一:
chset = cast(model, params, @required_fields, @optional_fields)
put_change(chset, :column_name, "hello")
最终目标是将行的inserted_at
换成新值,因此架构上的简单default: "hello"
是不够的。
非常感谢!
答案 0 :(得分:0)
我最终通过Postgres片段解决了这个问题。
这不是我想要的,所以我会把这个问题留给有changset
答案的人,因为那对我来说仍然没有任何作用。
这是我的临时解决方案,涉及postgres迁移文件。
create table(:stuffs) do
add :expires_at, :datetime, default: fragment("now() + interval '60 days'")
end