2017-01-07 3 views
1

Repo.get(MyModel, id)から返されたEcto.Schema構造体を保存します。Ectoレコード構造体を直列化して格納可能にする方法:データベース内のマップ?

のようなもの__meta__association: <Association is not loaded>は、それを妨害しないようにするので、私は例外(それは合理的です)をキャッチします。データベースに&ストアをシリアル化できるレコード列のマップのみを取得するネイティブ関数Ectoはありますか?私はこの目的のために任意のエクトネイティブ関数を知らないので

答えて

1

私のソリューション

defmodule MyApp.Schema do 
    @schema_meta_fields [:__meta__] 

    def to_storeable_map(struct) do 
    association_fields = struct.__struct__.__schema__(:associations) 
    waste_fields = association_fields ++ @schema_meta_fields 

    struct |> Map.from_struct |> Map.drop(waste_fields) 
    end 
end 
0

は、私はあなたが使用する必要がありますね:

https://hexdocs.pm/elixir/Map.html#from_struct/1

フィルターキーをあなたはしたくないと:

https://hexdocs.pm/elixir/Enum.html#filter/2

結果を次のように設定します。

https://hexdocs.pm/elixir/Enum.html#into/2

編集:あなたは構造体よりも、マップを返すために、クエリに「マップを()」を使用することができますように見えます:https://github.com/elixir-ecto/ecto/issues/1348

関連する問題