2016-05-14 33 views
1

我有相同的错误Fix protocol Ecto.Queryable not implemented error但我认为有不同的情况Ecto.Queryable不执行[...]

我想(以下凤凰书)限制Estimate s表示可以删除给用户拥有的,除非他们拥有管理员权限。

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) 

但是,当我使用这个函数作为管理员,我得到

**(Protocol.UndefinedError)协议Ecto.Queryable不是[所有预算清单]

实施我误解了什么?

回答

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