问题描述
我是 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
和
用户 %{"email" => "[email protected]","name" => "jimmyjobber","username" => "jimmyjobber"}
来自 Ecto 文档的 cast_assoc/3 用于处理外部数据。
广泛的搜索找到了接近我的问题的文章,但没有任何帮助。
请告诉我我错过了什么,以便我继续学习本教程。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)