gpt4 book ai didi

elixir - phoenix 框架如何在 Ecto 模型中设置默认值

转载 作者:行者123 更新时间:2023-12-04 11:49:58 25 4
gpt4 key购买 nike

我想在 Phoenix Framework 中为模型设置默认值,我尝试过:

  def new(conn, _params) do

user = get_session(conn, :user)
if is_nil user do
user = Repo.get_by(User, name: "guest")
conn = put_session(conn, :user, user)
end

changeset = Module.changeset(%Module{})

changeset
|> Ecto.Changeset.put_change(:user, user)
|> Ecto.Changeset.put_change(:version, "0.0.0")
|> Ecto.Changeset.put_change(:visibility, "public")

render(conn, "new.html", user: user, changeset: changeset)
end

如何在模型中设置默认值,以便在渲染 new.html 时显示它们?

顺便说一句,这是我的默认变更集功能。我不知道如何使用它?我假设在类型转换之后在管道中使用 Ecto.changeset.put_change?
  def changeset(model, params \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
end

最佳答案

有几种方法取决于您的变更集功能(您没有在此处提供。)

你可以这样做:

changeset = Module.changeset(%Module{user: user, version: "0.0.0", visibility: "public"})

另一种选择是将参数传递给您的变更集函数:
changeset = Module.changeset(%Module{}, %{user: user, version: "0.0.0", visibility: "public"})

然而请务必注意,您的版本带有 put_change/3如果您绑定(bind)管道的结果,该功能也将起作用:

改变:
changeset = Module.changeset(%Module{})

changeset
|> Ecto.Changeset.put_change(:user, user)
|> Ecto.Changeset.put_change(:version, "0.0.0")
|> Ecto.Changeset.put_change(:visibility, "public")

到:
changeset =
Module.changeset(%Module{})
|> Ecto.Changeset.put_change(:user, user)
|> Ecto.Changeset.put_change(:version, "0.0.0")
|> Ecto.Changeset.put_change(:visibility, "public")

另一种选择是在迁移中的数据库级别设置默认值。如果您查看 :default Ecto.Migration.add/3 的选项你会看到如何做到这一点。

关于elixir - phoenix 框架如何在 Ecto 模型中设置默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33027873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com