Ecto.Queryable未实现[....]

时间:2016-05-14 12:51:13

标签: phoenix-framework ecto

我和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未实现[所有估算列表]

我误解了什么?

1 个答案:

答案 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