Phoenix でデフォルトの json ツールを使用していますが、何らかの理由で日付 (フィールド タイプ:date) を返すことができません。私はこのようなものを得る:
unable to encode value: {2015, 3, 24}
タイプdateのデータベース内のフィールドでpostgresデータベースを使用しています。何か不足していますか?毒でエンコードする前に、日付を解析する関数を作成する必要がありますか?
Phoenix でデフォルトの json ツールを使用していますが、何らかの理由で日付 (フィールド タイプ:date) を返すことができません。私はこのようなものを得る:
unable to encode value: {2015, 3, 24}
タイプdateのデータベース内のフィールドでpostgresデータベースを使用しています。何か不足していますか?毒でエンコードする前に、日付を解析する関数を作成する必要がありますか?
あなたの「日付オブジェクト」は単なるElixirタプルです。Posion は Elixir タプルをエンコードする方法を知りません:
iex(1)> Poison.encode({2015, 3, 24})
{:error, {:invalid, {2015, 3, 24}}}
最初に日付を文字列にフォーマットすると、Posion は問題なく JSON にエンコードします。
iex(2)> Poison.encode(:io_lib.format("~4..0B-~2..0B-~2..0B", [2015, 3, 24]) |> List.flatten |> to_string)
{:ok, "\"2015-03-24\""}
お役に立てれば。
これは、次の Phoenix リリース (v0.11) で改善される予定です。
新しい Phoenix バージョンには、 phoenix_ectoプロジェクト用Ecto.DateTime
およびEcto.Date
経由のエンコーダが自動的に含まれます。だから、それはうまくいくはずです™。
とは言っても、タプルではなく構造体を操作するので、 and の代わりにEcto.DateTime
、and Ecto.Date
friendsを使用することをお勧めします。:datetime
:time