miguelcoba

miguelcoba

Polymorphic_embed for LiveView 1.1

Does anyone have a working example of polymorphic_embed working with LiveView 1.1? Specifically the live view part (the backend part seems to work just fine).

I have followed the documentation but I see nothing on the browser. Nothing is emitted on the html if I inspect it.

Looking at the github issues/pull requests, it seems like it is kinda abandoned for the last year.

Any pointers to a working example or a fork that works for current (1.1) live view?

Thanks!

First Post!

brownerd

brownerd

I’ve been using it, but in a project that’s still in development. Its working great for me. Do you have any code to post, like the Schema and LiveView that use polymorphic_embed?

I do remember being confused about the usage, but it working.

Most Liked

brownerd

brownerd

Cool! Sorry for the late response, but I’m glad you figure it out. Like I said, I also remember running into some walls getting it to work the way I though it was supposed to. Like you, I eventually got it working and it has been great for me ever since. Best regards!

miguelcoba

miguelcoba

Ok, I think I got it to work:

I added a default to the client_type:

    field :client_type, Ecto.Enum, values: [:legal_entity, :individual], default: :legal_entity

Then the new puts the correct embedded struct, depending on the `client_type`:



  defp apply_action(socket, :new, _params) do
    client = %Client{user_id: socket.assigns.current_scope.user.id}

    client =
      case client.client_type do
        :legal_entity ->
          %Client{client | client_name: %LegalEntityName{}}

        :individual ->
          %Client{client | client_name: %IndividualName{}}
      end

    socket
    |> assign(:page_title, gettext("New client"))
    |> assign(:client, client)
    |> assign(:form, to_form(Clients.change_client(socket.assigns.current_scope, client)))
  end



And when validating, if the `client_type` changed, I change the polymorphic_embed struct too:


  @impl true
  def handle_event("validate", %{"client" => client_params}, socket) do
    changeset =
      Clients.change_client(socket.assigns.current_scope, socket.assigns.client, client_params)

    changeset =
      case Ecto.Changeset.get_change(changeset, :client_type) do
        nil -> changeset
        :legal_entity -> Ecto.Changeset.put_change(changeset, :client_name, %LegalEntityName{})
        :individual -> Ecto.Changeset.put_change(changeset, :client_name, %IndividualName{})
      end

    {:noreply, assign(socket, form: to_form(changeset, action: :validate))}
  end

The problem with replacing the client_name on the changeset when `client_type` changes is that the previous values are lost, but is something I can live with.

Thanks!

Where Next?

Popular in Questions Top

vegabook
I’m brand new to Phoenix and I have stripped one of the demo applications to the bone. I just want to get an svg up on the screen. Here i...
New
vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
belgoros
I’m not a pro in using Regex and can’t figure out why the following behaviour happens, especially if we take into account the difference ...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New

Other popular topics Top

vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
Darmani72
If I have a post route which an argument: post /my_post_route/:my_param1, MyController.my_post_handler How would get the post params ...
New
dogweather
I wrote this comment on r/haskell, and it’s not popular there. :wink: But I think I’m on to something… Haskell reminds me of Java, and e...
New
gausby
I asked this very same question on twitter and got some interesting feedback, but I thought it would be a good question to ask here as we...
1207 40082 209
New
senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New

We're in Beta

About us Mission Statement