2015-09-13 9 views
27

にJSONにエクトモデルのエンコードPoison.encodeを使用して! Contactモデルで私は次のエラーを取得する:は、私は万能薬と鳳凰のまわりで私の頭を取得しようとする試みには、次のチュートリアルを介しつもりエリキシル

https://github.com/elixir-lang/ecto/issues/840 と修正:

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

これは、次の問題に私を導いた https://coderwall.com/p/fhsehq/fix-encoding-issue-with-ecto-and-poison

私はlibに/ poison_encoderにブログ記事からのコードを追加しました.ex、私は今、次のエラーが表示されます:

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

私は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

ポストに 'lib/poison_encoder.ex'のコードを入れてください。 –

答えて

49

Poison 1.5への更新。それを使って、あなたのモデルで宣言することができます:

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

これは、より速く、より安全で、よりクリーンになるでしょう。

+0

うまくいかなかった。私は何か別のことをする必要がありますか? –

+15

"それはうまくいかなかった"と記述できますか?それが起こる可能性がある理由はたくさんありますが、適切な記述がなければ、他に何をすべきかを理解することは本当に困難です。 –

+0

私はこれを実証するより多くの例を見たいと思っています。 https://github.com/elixir-ecto/ecto/blob/master/lib/ecto/schema.ex#L53> '@ derive' - ' Kernel.defstruct/1'の '@ derive'と同じですスキーマはシーンの背後にある構造体を定義します。 – zeroasterisk

関連する問題