我一直在关注 EQuimper 制作的 Instagram 克隆教程。我一直在尝试通过后端进一步扩展应用程序,因为目前前端并不重要。我正在尝试实现删除照片功能,但它似乎不起作用,我不知道为什么。
mutation do
@doc """
deletes a photo in the database
"""
field :photo_delete, list_of(:photo) do
arg :id, non_null(:id)
resolve &Resolvers.Posts.photo_delete/3
end
end
我的 schema.ex 在突变部分下包含此代码。
def photos(_,_,_) do
{:ok, Instagram.Posts.list_photos}
end
def photo(_, %{id: id}, _) do
{:ok, Instagram.Posts.get_photo!(id)}
end
def photo_delete(_, %{id: id}, _) do
photo_from_db = {:ok, Instagram.Posts.get_photo!(id)}
{:ok, Instagram.Posts.delete_photo(photo_from_db)}
end
这是 resolver.posts 文件中的代码,用于返回列表或单张照片。
def delete_photo(%Photo{} = photo) do
Repo.delete(photo)
end
这是执行突变以从数据库中删除照片的代码,它接收照片结构并将其删除。
object :photo do
field :id, non_null(:id)
field :image_url, non_null(:string)
field :caption, :string
field :inserted_at, non_null(:string)
field :update_at, non_null(:string)
end
这是定义照片模式的代码。
schema "photos" do
field :caption, :string
field :image_url, :string
timestamps()
end
@doc false def changeset(%Photo{} = photo, attrs) 做照片 |> cast(attrs, [:image_url, :caption]) |> validate_required([:image_url]) 结束
此代码位于处理架构的 photo.ex 文件中(我认为)
mutation {
photo_delete(id: 1){
id
}
}
这是我运行以从数据库中删除查询的突变。它返回一个错误说
"no function clause matching in Instagram.Posts.delete_photo/1"
从终端返回。我做错了什么?以及我对本示例中的功能流程有什么不了解的地方。视频系列链接:https ://www.youtube.com/watch?v=AVQQF_J3Az0&list=PLzQWIQOqeUSOu74jGJMRH06gneM3wL82Z进一步说明。