Ecto has_one based on type

Thank you! yep, I did something like this. There is still a lot of places to improve, but it’s working already:

def get_component!(id) do
    Component
    |> Repo.get!(id)
    |> preloads()
  end

  defp preloads(component) do
    component
    |> Repo.preload(Component.get_type_as_atom(component.type))
  end

And implemented JSON for model:

def get_type_as_atom(type) do
    %{
      "html" => :html,
      "rss" => :rss
    }[type]
  end
defimpl Jason.Encoder, for: Component do
    def encode(value, opts) do
      fields = [Component.get_type_as_atom(value.type) | [:name, :type]  ]
      m = Map.take(value, fields)
      Jason.Encode.map(m, opts)
    end
  end