Hi!
I ran the following command to create a resource:
mix phx.gen.html Main Activity activities name:string datetime_start:datetime datetime_end:datetime category_id:references:categories mood_id:references:moods
After some search I discovered that the inputs for the associations are not created automatically, so I tried to do it, for that I did:
- Edit
activity.ex
schema and added:
+belongs_to :category, Categories
+belongs_to :mood, Moods
-field :category_id, :id
-field :mood_id, :id
Then I used the Main
context functions to retrieve all categories and moods and pass it to the new.html
form:
changeset = Main.change_activity(%Activity{})
+categories = Main.list_categories() |> Enum.map(fn c -> {c.name, c.id} end)
+moods = Main.list_moods() |> Enum.map(fn m -> {m.name, m.id} end)
+render(conn, "new.html", changeset: changeset, moods: moods, categories: categories)
+<%= label f, :category %>
+<%= select f, :category, @categories, prompt: "Choose" %>
+<%= error_tag f, :category %>
+
+<%= label f, :mood %>
+<%= select f, :mood, @moods, prompt: "Choose" %>
+<%= error_tag f, :mood %>
But when loading the page in the browser I get this error:
protocol Phoenix.HTML.Safe not implemented for #Ecto.Association.NotLoaded<association :category is not loaded> of type Ecto.Association.NotLoaded (a struct). This protocol is implemented for the following type(s): Decimal, Phoenix.LiveComponent.CID, Phoenix.LiveView.Component, Phoenix.LiveView.Comprehension, Phoenix.LiveView.JS, Phoenix.LiveView.Rendered, Time, Integer, Tuple, List, DateTime, NaiveDateTime, Float, Atom, Phoenix.HTML.Form, BitString, Date
What I am doing wrong?
Thanks!