2015-09-13 6 views
27

ich in einem Versuch, über das folgende Tutorial werde meinen Kopf um Elixier und Phoenix zu erhalten:Encoding ein Ecto Modell zu JSON in Elixier

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

ich mit dem Test in ein Problem laufen lasse, vor allem mit Poison.encode! auf dem Kontaktmodell. Ich erhalte den folgenden Fehler:

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

Dies führte mich zu der folgenden Frage:

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

ich den Code aus dem Blog-Artikel in lib/poison_encoder hinzugefügt haben .ex, aber ich bekomme jetzt folgenden Fehler:

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

Der Code habe ich 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

Bitte fügen Sie den Code, den Sie in Ihrem lib/poison_encoder.ex haben, in den Post ein –

Antwort

49

Update auf Gift 1.5. Damit können Sie in Ihren Modellen deklarieren:

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

Es wird schneller, sicherer und sauberer.

+0

Es hat nicht funktioniert. Muss ich etwas anderes machen? –

+15

Kannst du bitte beschreiben "es hat nicht funktioniert"? Es gibt viele Gründe, warum es so passieren könnte, ohne eine genaue Beschreibung, es ist wirklich schwer herauszufinden, was noch getan werden sollte. –

+0

Ich würde gerne mehr Beispiele sehen und dies demonstrieren. https://github.com/elixir-ecto/ecto/blob/master/lib/ecto/schema.ex#L53> '@ derived' - das gleiche wie' @ derived' in 'Kernel.defstruct/1' als verfügbar Das Schema definiert eine Struktur hinter den Kulissen. – zeroasterisk

Verwandte Themen