首页 > 解决方案 > 在phoenix中查询时出现Ecto.Query.CastError

问题描述

所以我复制了一个查询,它将预加载其中关联的用户。

问题是它抛出了ecto.query.cast错误,我似乎找不到解决方案。

询问

def get_avatar!(id) do
IO.inspect(id)

query =
  from(
    p in AssocApp.Accounts.Avatar,
    where: p.user_id == ^id,
    select: p,
    preload: [:user]
  )

Repo.get!(Avatar, query)
end

用户模式

schema "users" do
field(:password, :string)
field(:username, :string)
has_one(:avatar, AssocApp.Accounts.Avatar)

timestamps()end

化身模式

schema "avatars" do
field(:firstname, :string)
field(:lastname, :string)
field(:pic_url, :string)
belongs_to(:user, AssocApp.Accounts.User)

timestamps()end

@doc false def changeset(avatar, attrs) do avatar |> cast(attrs, [:firstname, :lastname, :pic_url, :user_id]) # |> validate_required([:firstname, :lastname, :pic_url])end

化身控制器

def show(conn, %{"id" => id}) do
avatar = Accounts.get_avatar!(id)
render(conn, "show.json", avatar: avatar)end

截屏:

在此处输入图像描述

标签: elixirphoenix-frameworkecto

解决方案


Repo.get!/2通过其主键获取记录,但您将查询传递给它。您需要使用Repo.one!/1

Repo.one!(query)

推荐阅读