在 phoenix 中查询时得到 Ecto.Query.CastError
Getting Ecto.Query.CastError when querying in phoenix
所以我复制了一个查询,它将预加载其中关联的用户。
问题是它抛出 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
截图:
Repo.get!/2
通过主键获取记录,但您正在向它传递查询。您需要使用 Repo.one!/1
:
Repo.one!(query)
所以我复制了一个查询,它将预加载其中关联的用户。
问题是它抛出 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
截图:
Repo.get!/2
通过主键获取记录,但您正在向它传递查询。您需要使用 Repo.one!/1
:
Repo.one!(query)