2017-08-24 2 views
2

Lorsque j'essaie de rendre des données json, j'obtiens l'erreur suivante dans mon contrôleur.Poison.EncodeError à GET/api impossible de coder la valeur: {nil, "paths"}

Poison.EncodeError at GET /api 
unable to encode value: {nil, "paths"} 

web/controllers/api_controller.ex:1 App.ApiController.action/2 

Après avoir cherché autour de moi à mon modèle essayé comme ceci:

defmodule App.Api do 
    use App.Web, :model 

    @derive {Poison.Encoder, only: [:basePath, :definitions, :paths]} 
    schema "apis" do 
    field :basePath, :string 
    field :definitions, :string 
    has_many :paths, App.Path 

    timestamps() 
    end 
end 

Ce qui ne semble pas résoudre l'erreur. Je suis arrivé cette erreur après avoir essayé de précharger mon champ de chemins dans mon contrôleur comme ceci:

defmodule App.ApiController do 
    use App.Web, :controller 

    alias App.Api 

    def index(conn, _params) do 
    apis = Repo.all(Api) |> Repo.preload(:paths) 
    render conn, "index.json", apis: apis 
    end 
end 

Je suis en mesure d'insérer des données trouvent dans ma base de données et je peux interroger tout cela avec:

Repo.all(Api) |> Repo.preload(:paths) 

Des pensées sur quoi d'autre essayer? Merci

Répondre

1

Si vous souhaitez précharger votre :paths, vous devez également utiliser derive sur le module Documentr2.Path.

@derive [Poison.Encoder] 

ou

@derive {Poison.Encoder, only: [:field_you_want]} 
+0

Merci travaillé comme un charme. –