2015-10-23 9 views
5

In Rails Controller, si visualizza frequentemente il codice sotto per ottenere solo i post che appartengono a current_user;Query associazione Ecto basata

class PostsController < APIController 
    def show 
    current_user.posts.find(params[:id]) 
    end 
end 

Qual è il modo migliore per esprimerlo con Ecto?

risposta

6

È possibile utilizzare Ecto.Model.assoc/2 insieme alle funzioni Repo.

Per ottenere un singolo elemento:

assoc(current_user, :posts) |> Repo.get(id) 

per ottenere un tutti i messaggi per un utente:

assoc(current_user, :posts) |> Repo.all() 

È inoltre possibile utilizzare questo per comporre query:

esempio

defmodule Post do 
    use Ecto.Model 

    ... 

    def published(query) do 
    from p in query, 
     where: p.published 
    end 
end 

assoc(current_user, :posts) |> Post.published() |> Repo.all() 
Problemi correlati