如何在插入时为 Ecto 模型中的某些字段设置某些值
How can I set some values to some fields in an Ecto model on insert
我在 Ecto 模型中有几个字段,我想为其插入 a) 默认值 b) 在插入时生成值。我怎样才能做到这一点?我应该在哪个函数中执行此操作,在 "changeset"?
中
是的,这些东西通常放在变更集函数中。如果您需要区分插入和更新时发生的情况,您可以定义多个变更集函数并在更新或插入数据时调用适当的函数。例如:
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
如果默认值为静态值,您还可以使用 ecto 的 default:
选项为架构中的 field/3
宏 - 它相当于为 [=] 中的字段提供值13=]声明。
我在 Ecto 模型中有几个字段,我想为其插入 a) 默认值 b) 在插入时生成值。我怎样才能做到这一点?我应该在哪个函数中执行此操作,在 "changeset"?
中是的,这些东西通常放在变更集函数中。如果您需要区分插入和更新时发生的情况,您可以定义多个变更集函数并在更新或插入数据时调用适当的函数。例如:
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
如果默认值为静态值,您还可以使用 ecto 的 default:
选项为架构中的 field/3
宏 - 它相当于为 [=] 中的字段提供值13=]声明。