【发布时间】:2021-03-09 21:29:09
【问题描述】:
我是 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" => "jimmyjobber@emailaddress.com", "name" => "jimmyjobber", "username" => "jimmyjobber"}
来自 Ecto 文档 cast_assoc/3 用于处理外部数据。
广泛搜索找到了与我的问题相近的文章,但没有任何帮助。
请告诉我我错过了什么,以便我继续学习本教程。
【问题讨论】:
-
没有
Ecto.ChangeSet这样的模块,名称是Ecto.Changeset,通过查看架构模块中的导入可以注意到。 -
丹尼尔,谢谢你。在我所有的代码中,大小写敏感度都被遗漏了。
标签: elixir phoenix-framework ecto changeset