【问题标题】:What's the right way to seed a date field in phoenix framework?在凤凰框架中播种日期字段的正确方法是什么?
【发布时间】:2019-09-26 13:20:29
【问题描述】:

我正在创建一个 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

更新:我注意到名字和姓氏应该是名字和姓氏。我更正了,但我仍然遇到同样的错误。

【问题讨论】:

    标签: elixir phoenix-framework seeding


    【解决方案1】:

    您不能直接将日期添加为字符串,而是使用~D sigil 将其添加为字符串:

    dateOfBirth: ~D[1999-05-18]
    

    编辑: 您在 seeds.exs 中为用户模式命名的命名空间也不正确,请更改:

    alias CardsWeb.Infrastructure.User
    

    alias Infrastructure.User
    

    【讨论】:

    • 它仍然给我同样的错误。可能整个初始化语句都是错误的,和日期解析无关。
    • 我注意到名字和姓氏应该是名字和姓氏。我更正了,但我仍然得到同样的错误。
    • 另外,变量的顺序重要吗?
    • alias CardsWeb.Infrastructure.User在seeds.exs也不正确,改成alias Infrastructure.User
    • 就是这样!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 2011-12-17
    • 2010-12-28
    • 1970-01-01
    相关资源
    最近更新 更多