如何在插入时为Ecto模型中的某些字段设置一些值

时间:2016-09-04 14:10:43

标签: elixir phoenix-framework ecto

我在Ecto模型中有几个字段,我想要插入a)默认值b)在我执行插入时生成值。我怎样才能做到这一点?我应该在哪个函数中使用" changeset"?

1 个答案:

答案 0 :(得分:3)

是的,这类事情的通常位置是变更集功能。如果需要区分插入和更新时发生的情况,可以定义多个变更集函数,并在更新或插入数据时调用相应的变量集函数。例如:

defmodule MyApp.Schema do
  #...

  def insert_changeset(struct, params) do
    struct
    |> common_changeset(params)
    |> put_change(:foo, "bar") # writing a field to the changeset
    # ...
  end

  def update_changeset(struct, params) do
    struct
    |> common_changeset(params)
    # ...
  end

  defp common_changeset(struct, params) do
    struct
    |> cast(params, [:foo, :bar])
    # ...
  end
end

如果默认值是静态值,您还可以对模式中的default:宏使用ecto的field/3选项 - 它相当于为{{1}中的字段提供值宣言。