phoenix 框架如何在 Ecto 模型中设置默认值
phoenix framework how to set default values in Ecto model
我想在 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
函数的版本也可以工作:
变化:
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")
另一种选择是在迁移中设置数据库级别的默认值。如果您查看 Ecto.Migration.add/3 的 :default
选项,您将了解如何执行此操作。
我想在 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
函数的版本也可以工作:
变化:
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")
另一种选择是在迁移中设置数据库级别的默认值。如果您查看 Ecto.Migration.add/3 的 :default
选项,您将了解如何执行此操作。