我和Fix protocol Ecto.Queryable not implemented error有同样的错误,但我认为是不同的情况
我想(按照凤凰书)将可以删除的Estimate
限制为用户拥有的 def delete(conn, %{"id" => id}, user) do
user_estimates =
case user.customer_id == 1 do
true ->
IO.inspect("Admin")
Repo.all(Estimate)
false ->
IO.inspect("Non-Admin")
assoc(user, :estimates)
end
estimate = Repo.get!(user_estimates, id)
Repo.delete!(estimate)
,除非他们拥有管理员权限。
{{1}}
但是当我使用此功能作为管理员时我得到了
**(Protocol.UndefinedError)协议Ecto.Queryable未实现[所有估算列表]
我误解了什么?
答案 0 :(得分:1)
问题在于
Repo.all(Estimate)
Repo.all
实际执行传递的查询并将结果作为列表返回。如果您想要包含所有估算值的Ecto.Queryable
,只需返回Estimate
。
这应该有效:
user_estimates =
case user.customer_id == 1 do
true ->
IO.inspect("Admin")
Estimate
false ->
IO.inspect("Non-Admin")
assoc(user, :estimates)
end