函数 Ecto.ChangeSet.cast_assoc/3 未定义模块 Ecto.ChangeSet 不可用

问题描述

我是 Elixir、Phoenix 和 Ecto 的新手,所以我正在学习视频教程。本教程通过架构为用户设置凭据,每个用户都有一个唯一的凭据。所以我有一个用户:

defmodule Foo.Accounts.User do
  use Ecto.Schema
  import Ecto.Changeset

  alias Foo.Accounts.Credential


  schema "users" do
    field :name,:string
    field :username,:string
    has_one :credential,Credential

    timestamps()
  end

  @doc false
  def changeset(user,attrs) do
    user
    |> cast(attrs,[:name,:username])
    |> validate_required([:name,:username])
    |> unique_constraint(:username)
  end
end

和证书:

defmodule Foo.Accounts.Credential do
  use Ecto.Schema
  import Ecto.Changeset

  alias Foo.Accounts.User

  schema "credentials" do
    field :email,:string
    belongs_to :user,User

    timestamps()
  end

  def changeset(credential,attrs) do
    credential
    |> cast(attrs,[:email])
    |> validate_required([:email])
    |> unique_constraint(:email)

  end

end

create_user 代码是:

  def create_user(attrs \\ %{}) do
    %User{}
    |> User.changeset(attrs)
    |> Ecto.ChangeSet.cast_assoc(:credential,with: &Credential.changeset/2)
    |> Repo.insert()
  end

创建凭据代码为

 def create_credential(attrs \\ %{}) do
    %Credential{}
    |> Credential.changeset(attrs)
    |> Repo.insert()
  end

当我尝试插入用户时 - 使用完整的有效数据 - 我收到错误

POST /users 时出现 UndefinedFunctionError 函数 Ecto.ChangeSet.cast_assoc/3 未定义(模块 Ecto.ChangeSet 不可用)

我不知道为什么。

错误屏幕显示 Ecto.ChangeSet.cast_assoc/3 用 3 个参数调用 #Ecto.Changeset,valid?: true> :凭据 [与:&Foo.Accounts.Credential.changeset/2]

用户 %{"email" => "[email protected]","name" => "jimmyjobber","username" => "jimmyjobber"}

来自 Ecto 文档的 cast_assoc/3 用于处理外部数据。

广泛的搜索找到了接近我的问题的文章,但没有任何帮助。

请告诉我我错过了什么,以便我继续学习本教程。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)