Phoenixframework Ядовитый кодер игнорирует производную

У меня есть эта модель с has_many директивы. Я пытаюсь извлечь из него все значения и отобразить их в ответе json:

defmodule Heroico.Datacenter do
    use Heroico.Web, :model

    @derive {Poison.Encoder, only: [:id, :identifier, :city, :state, :country]}
    schema "datacenters" do
        field :identifier, :string
        field :city, :string
        field :state, :string
        field :country, :string

        belongs_to :provider, Heroico.Provider
        has_many :plans, Heroico.Plan

        timestamps()
    end

    ...
end

контроллер:

def index(conn, _params, _current_user, _claims) do
    render conn, "index.json", datacenters: Repo.all(Datacenter)
end

Посмотреть:

defmodule Heroico.DatacenterView do
    use Heroico.Web, :view

    def render("index.json", %{datacenters: datacenters}) do
        %{datacenters: datacenters}
    end
end

lib/poison_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

Как видите, @derive четко говорится, что только [:id, :identifier, :city, :state, :country] должен быть закодирован, но я не могу избавиться от этой ошибки:

cannot encode association :plans from Heroico.Datacenter to JSON because the association was not loaded. Please make sure you have preloaded the association or remove it from the data to be encoded

0 ответов

Другие вопросы по тегам