Ecto:如何在没有Model.Callbacks的情况下注入变更集上的数据

时间:2016-05-19 16:30:23

标签: postgresql elixir phoenix-framework ecto

现在不推荐使用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_changechange以及几乎Ecto.Changeset中的所有其他内容,而不是cast

我也尝试了非管道方法,以防万一:

chset = cast(model, params, @required_fields, @optional_fields)
put_change(chset, :column_name, "hello")

最终目标是将行的inserted_at换成新值,因此架构上的简单default: "hello"是不够的。

非常感谢!

1 个答案:

答案 0 :(得分:0)

我最终通过Postgres片段解决了这个问题。

这不是我想要的,所以我会把这个问题留给有changset答案的人,因为那对我来说仍然没有任何作用。

这是我的临时解决方案,涉及postgres迁移文件。

create table(:stuffs) do
    add :expires_at, :datetime, default: fragment("now() + interval '60 days'")
end