2016-03-03 17 views
7

Sto provando ad implementare Guardian nella mia API ed eseguire un login attraverso di esso per ottenere JWT indietro. Il tutorial che sto guardando è here. Il problema consiste nell'implementare l'accesso utilizzando un modello utente simile a quello che stanno utilizzando nell'esempio. Il codice del modello si presenta come:Ecto.Queryable non implementato per

defmodule PushflightServer.User do 
    use PushflightServer.Web, :model 

use Ecto.Repo 
import Ecto.Query 
    alias PushflightServer.Repo 

    schema "users" do 
    field :name, :string 
    field :email, :string 
    field :encrypted_password, :string 
    field :password, :string, virtual: true 
    field :verify_token, :string 
    field :verify_date, Ecto.DateTime 

    timestamps 
    end 

    def from_email(nil), do: { :error, :not_found } 
    def from_email(email) do 
    IO.write("Before email") 
    IO.inspect(email) 
    Repo.one(User, email: email) 
    end 

Se io chiamo la FROM_EMAIL sia dall'interno Phoenix o direttamente in iex -S mescolare, ottengo il seguente errore:

user = PushflightServer.User.from_email ("[email protected]")

** (Protocol.UndefinedError) protocol Ecto.Queryable not implemented for User, the given module does not exist (ecto) lib/ecto/queryable.ex:33: Ecto.Queryable.Atom.to_query/1 (ecto) lib/ecto/repo/queryable.ex:90: Ecto.Repo.Queryable.execute/5 (ecto) lib/ecto/repo/queryable.ex:15: Ecto.Repo.Queryable.all/4 (ecto) lib/ecto/repo/queryable.ex:44: Ecto.Repo.Queryable.one/4

devo mancare qualcosa di semplice, ma non sono riusciti a trovare alcuna documentazione sul perché questo sta accadendo. L'inserimento dei dati utilizzando la Repo ha funzionato bene. Qualche idea?

risposta

3

penso che devi namespace completamente User come PushflightServer.User oppure è possibile utilizzare la scorciatoia __MODULE__

2

si dovrebbe fare riferimento ai moduli con i namespace

def from_email(email) do 
    PushflightServer.one(PushflightServer.User, email: email) 
    end 
Problemi correlati