2017-03-24 1 views
0

J'ai référencé cette question (Ecto Model - subquery in select) pour créer une sous-requête dans mon instruction select, mais j'ai cette erreur.Sous-requête Ecto dans une erreur de sélection de carte

prévu une carte, a obtenu: {{% ZB.JournalEntry méta: # Ecto.Schema.Metadata <: chargé, "journal_entries">

Voici le code que j'ai, je suis J'ai raté quelque chose? Si je laisse de côté l'instruction select, le code fonctionne correctement.

journal_entries = from entry in JournalEntry, 
    select: { 
    entry, 
    (fragment("(SELECT sum(amount) FROM journal_entry_lines WHERE kind = 0 and journal_entry_id = ?)", entry.id)) 
    }, 
    preload: [ 
    :journal_entry_lines, 
    journal_entry_lines: :journal_entry, 
    journal_entry_lines: :chart_account 
    ], 
    where: entry.id in ^journal_entry_ids and is_nil(entry.deleted_at), 
    limit: ^per_page, 
    offset: 0 

sort = if not is_nil(params["sort"]) and params["sort"] in JournalEntry.sort_options, 
    do: String.to_atom(params["sort"]), 
    else: String.to_atom("date") 

direction = if params["direction"] == "asc", 
    do: :asc, 
    else: :desc 

journal_entries = from entry in journal_entries, 
    order_by: [{^direction, field(entry, ^sort)}] 

render conn, "index.json-api", data: Repo.all(journal_entries), opts: [ 
    include: "journal_entry", 
    meta: meta_data 
] 

Voici la trace de la pile, mais elle ne semble pas indiquer la ligne sur laquelle l'erreur s'est produite.

web/controllers/journal_entry_controller.ex:1 ZB.JournalEntryController.action/2 
web/controllers/journal_entry_controller.ex:1 ZB.JournalEntryController.phoenix_controller_pipeline/2 
lib/zipbooks/endpoint.ex:1 ZB.Endpoint.instrument/4 
lib/phoenix/router.ex:261 ZB.Router.dispatch/2 
web/router.ex:1 ZB.Router.do_call/2 
lib/zipbooks/endpoint.ex:1 ZB.Endpoint.phoenix_pipeline/1 
lib/plug/debugger.ex:123 ZB.Endpoint."call (overridable 3)"/2 
lib/zipbooks/endpoint.ex:1 ZB.Endpoint.call/2 

je trouve une autre façon qui ne jette pas une erreur, mais il ne se combine pas les deux objets.

select: %{entry: entry, amount: (fragment("(SELECT sum(amount) FROM journal_entry_lines WHERE kind = 0 and journal_entry_id = ?)", entry.id))}, 
+0

Êtes-vous sûr que cette ligne est de lancer cette erreur? Pouvez-vous poster le code environnant? – Dogbert

+0

@Dogbert J'ai ajouté le code environnant –

+0

Et laquelle de ces lignes est exactement jeter cette erreur? Veuillez également publier la pile dans le message d'erreur. – Dogbert

Répondre

0

j'ai pu le faire fonctionner cette façon de faire

journal_entries = from entry in JournalEntry, 
     select: %{ 
     entry: entry, 
     id: entry.id, 
     account_id: entry.account_id, 
     archived_at: entry.archived_at, 
     date: entry.date, 
     delete_at: entry.deleted_at, 
     is_closing: entry.is_closing, 
     is_confirmed: entry.is_confirmed, 
     note: entry.note, 
     amount: (fragment("(SELECT sum(amount) FROM journal_entry_lines WHERE kind = 0 and journal_entry_id = ?)", entry.id)) 
     },