在凤凰框架中播种日期字段的正确方法是什么?
What's the right way to seed a date field in phoenix framework?
我正在创建一个 phoenix api 应用程序。这是我的代码。
alias CardsWeb.Repo
alias CardsWeb.Infrastructure.User
Repo.insert! %User{login: "user", firstname: "User", lastname: "User", dateOfBirth: "1999-5-18"}
我 运行 它
时出现以下错误
** (CompileError) priv/repo/seeds.exs:15: Infrastructure.User.__struct__/1 is undefined, cannot expand struct Infrastructure.User
这是实体定义。
defmodule Infrastructure.User do
use Ecto.Schema
import Ecto.Changeset
schema "users" do
field :dateOfBirth, :date
field :firstName, :string
field :lastName, :string
field :login, :string
timestamps()
end
@doc false
def changeset(user, attrs) do
user
|> cast(attrs, [:login, :firstName, :lastName, :dateOfBirth])
|> validate_required([:login, :firstName, :lastName, :dateOfBirth])
end
end
更新: 我注意到 firstname 和 lastname 应该是 firstName 和 lastName。我更正了那个,但我仍然得到同样的错误。
您不能直接将日期添加为字符串,而是将其添加为字符串使用 ~D
sigil:
dateOfBirth: ~D[1999-05-18]
编辑:
您在 seeds.exs
中为用户模式设置别名的名称空间也不正确,请更改:
alias CardsWeb.Infrastructure.User
到
alias Infrastructure.User
我正在创建一个 phoenix api 应用程序。这是我的代码。
alias CardsWeb.Repo
alias CardsWeb.Infrastructure.User
Repo.insert! %User{login: "user", firstname: "User", lastname: "User", dateOfBirth: "1999-5-18"}
我 运行 它
时出现以下错误** (CompileError) priv/repo/seeds.exs:15: Infrastructure.User.__struct__/1 is undefined, cannot expand struct Infrastructure.User
这是实体定义。
defmodule Infrastructure.User do
use Ecto.Schema
import Ecto.Changeset
schema "users" do
field :dateOfBirth, :date
field :firstName, :string
field :lastName, :string
field :login, :string
timestamps()
end
@doc false
def changeset(user, attrs) do
user
|> cast(attrs, [:login, :firstName, :lastName, :dateOfBirth])
|> validate_required([:login, :firstName, :lastName, :dateOfBirth])
end
end
更新: 我注意到 firstname 和 lastname 应该是 firstName 和 lastName。我更正了那个,但我仍然得到同样的错误。
您不能直接将日期添加为字符串,而是将其添加为字符串使用 ~D
sigil:
dateOfBirth: ~D[1999-05-18]
编辑:
您在 seeds.exs
中为用户模式设置别名的名称空间也不正确,请更改:
alias CardsWeb.Infrastructure.User
到
alias Infrastructure.User