2017-04-15 5 views
0

Ich versuche Entitäten rufen aus einer Datenbank zu bestellen:kann nicht Repo.order_by richtig

def index(conn, _params) do 
    items = Repo.all(MyModel) 
      |> Repo.preload(:model2) 
      |> Repo.preload(:model3) 
      |> Repo.order_by([x], desc: x.created_at) 

Aber ich habe eine Ausnahme: undefined function x/0

Wie es zu beheben?

+0

Probieren Sie stattdessen '|> Ecto.Query.order_by ([x], desc: x.created_at)' '. – Dogbert

+0

@Dogbert 'Protokoll Ecto.Queryable nicht implementiert für [% MyModel {........},% MyModel {........}]' – user7863932

+0

@Dogbert, behoben, danke. – user7863932

Antwort

2

Repo.all gibt eine Liste von Strukturen zurück. Sie können die DB nicht bitten, sie zu bestellen, nachdem sie bereits abgefragt wurde. Versuchen Sie, die Abfrage zu erstellen, bevor Sie sie an Repo.all übergeben. Beachten Sie auch, dass Sie Ecto.Query.order_by und nicht Repo.order_by benötigen.

items = 
    MyModel 
    |> Ecto.Query.order_by([x], desc: x.created_at) 
    |> Repo.all() 
    |> Repo.preload(:model2) 
    |> Repo.preload(:model3)