2015-09-13 8 views
27

sto andando sopra il seguente tutorial, nel tentativo di ottenere la mia testa intorno elisir e Phoenix:codifica di un modello Ecto per JSON in elisir

https://robots.thoughtbot.com/testing-a-phoenix-elixir-json-api

Sono in esecuzione in un problema con il test, principalmente usando Poison.encode! sul modello di contatto. Ottengo il seguente errore:

unable to encode value: {nil, "contacts"} 

questo mi ha portato al seguente problema:

https://github.com/elixir-lang/ecto/issues/840 e la correzione: https://coderwall.com/p/fhsehq/fix-encoding-issue-with-ecto-and-poison

Ho aggiunto il codice dall'articolo blog in lib/poison_encoder .ex, ma ora ho il seguente errore:

no function clause matching in Poison.Encoder.Any.encode/2 

Il codice che ho in lib/p oison_encoder.ex:

defimpl Poison.Encoder, for: Any do 
    def encode(%{__struct__: _} = struct, options) do 
    map = struct 
      |> Map.from_struct 
      |> sanitize_map 
    Poison.Encoder.Map.encode(map, options) 
    end 

    defp sanitize_map(map) do 
    Map.drop(map, [:__meta__, :__struct__]) 
    end 
end 
+1

Per favore includi il codice che hai nel tuo 'lib/poison_encoder.ex' nel post –

risposta

49

Aggiornamento al veleno 1.5. Con esso puoi dichiarare nei tuoi modelli:

@derive {Poison.Encoder, only: [:foo, :bar, :baz]} 
schema "your schema" do 
    field :foo 
    field :bar 
    field :baz 
end 

Sarà più veloce, più sicuro e più pulito.

+0

Non ha funzionato. Devo fare qualcos'altro? –

+15

Puoi descrivere "non ha funzionato"? Ci sono molte ragioni per cui potrebbe accadere così senza una descrizione adeguata, è davvero difficile capire cos'altro dovrebbe essere fatto. –

+0

Mi piacerebbe vedere altri esempi, dimostrando questo. https://github.com/elixir-ecto/ecto/blob/master/lib/ecto/schema.ex#L53> '@ derive' - lo stesso di' @ derive' disponibile in 'Kernel.defstruct/1' as lo schema definisce una struttura dietro le quinte; – zeroasterisk

Problemi correlati