2016-05-14 9 views
1

Ich habe den gleichen Fehler wie Fix protocol Ecto.Queryable not implemented error aber mit dem, was ich denke, verschiedene UmständeEcto.Queryable nicht implementiert für [....]

sind möchte ich (nach dem Buch Phoenix) begrenzen die Estimate s das sein kann gelöscht werden, die einem Benutzer gehören, außer wenn sie über Administratorrechte verfügen.

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) 

Aber wenn ich diese Funktion als Admin ich

** (Protocol.UndefinedError) Protokoll Ecto.Queryable nicht für [Liste aller Schätzungen] implementiert

Was verstehe ich falsch?

Antwort

1

Das Problem ist in

Repo.all(Estimate) 

Repo.all tatsächlich die Abfrage ausführt geben und gibt die Ergebnisse als Liste. Wenn Sie eine Ecto.Queryable wünschen, die alle Schätzungen enthält, geben Sie einfach Estimate zurück.

Dies sollte funktionieren:

user_estimates = 
    case user.customer_id == 1 do 
    true -> 
     IO.inspect("Admin") 
     Estimate 
    false -> 
     IO.inspect("Non-Admin") 
     assoc(user, :estimates) 
    end 
Verwandte Themen