2015-08-29 21 views
6

Diciamo che ho un modulo MyApp.User ed ha il seguente metodo:Come accedere modulo corrente in Elixir

def update_some_counter(user) do 
    from(u in MyApp.User , where: u.id == ^user.id) 
    |> Repo.update_all(inc: [some_counter: 1]) 
end 

C'è un modo per cambiare MyApp.User nel codice qui sopra per un po 'di metodo che recupera modulo corrente?

risposta

15

La risposta di Patrick è corretta: è possibile utilizzare __MODULE__. Tuttavia, consiglierei a tutte le funzioni di query nel modello di ricevere la query come argomento (vedere qui: http://blog.drewolson.org/composable-queries-ecto/) e di non chiamare il repository all'interno del modello.

Lasciare l'atto di chiamare il repository, che è un effetto collaterale, al livello di integrazione, come i controller e cosa no.

0

È possibile utilizzare il modulo speciale __CALLER__ per accedere al nome del modulo di chiamata.

+3

Questo modulo speciale è disponibile solo all'interno di macro. –

7

È possibile utilizzare __MODULE__, che verrà sostituito con il nome del modulo di chiusura in fase di compilazione.

Problemi correlati