diff --git a/lib/acm_uc_demo/airplanes.ex b/lib/acm_uc_demo/airplanes.ex index b2dc423..6c241b3 100644 --- a/lib/acm_uc_demo/airplanes.ex +++ b/lib/acm_uc_demo/airplanes.ex @@ -37,6 +37,26 @@ defmodule AcmUcDemo.Airplanes do """ def get_airplane!(id), do: Repo.get!(Airplane, id) + @doc """ + Gets a single airplane with flights preloaded (including pilot information). + + Raises `Ecto.NoResultsError` if the Airplane does not exist. + + ## Examples + + iex> get_airplane_with_flights!(123) + %Airplane{flights: [%Flight{pilot: %Pilot{}}, ...]} + + iex> get_airplane_with_flights!(456) + ** (Ecto.NoResultsError) + + """ + def get_airplane_with_flights!(id) do + Airplane + |> Repo.get!(id) + |> Repo.preload(flights: :pilot) + end + @doc """ Creates a airplane. diff --git a/lib/acm_uc_demo/airplanes/airplane.ex b/lib/acm_uc_demo/airplanes/airplane.ex index d3aaf99..e1f44c7 100644 --- a/lib/acm_uc_demo/airplanes/airplane.ex +++ b/lib/acm_uc_demo/airplanes/airplane.ex @@ -8,6 +8,8 @@ defmodule AcmUcDemo.Airplanes.Airplane do field :tail_number, :string field :initial_hours, :decimal + has_many :flights, AcmUcDemo.Flights.Flight + timestamps(type: :utc_datetime) end diff --git a/lib/acm_uc_demo/flights/flight.ex b/lib/acm_uc_demo/flights/flight.ex index 9f82290..6e97185 100644 --- a/lib/acm_uc_demo/flights/flight.ex +++ b/lib/acm_uc_demo/flights/flight.ex @@ -5,8 +5,9 @@ defmodule AcmUcDemo.Flights.Flight do schema "flights" do field :hobbs_reading, :decimal field :notes, :string - field :pilot_id, :id - field :airplane_id, :id + + belongs_to :pilot, AcmUcDemo.Pilots.Pilot + belongs_to :airplane, AcmUcDemo.Airplanes.Airplane timestamps(type: :utc_datetime) end diff --git a/lib/acm_uc_demo_web/live/airplane_live/show.ex b/lib/acm_uc_demo_web/live/airplane_live/show.ex index d51b881..0223dd4 100644 --- a/lib/acm_uc_demo_web/live/airplane_live/show.ex +++ b/lib/acm_uc_demo_web/live/airplane_live/show.ex @@ -26,6 +26,28 @@ defmodule AcmUcDemoWeb.AirplaneLive.Show do <:item title="Tail number">{@airplane.tail_number} <:item title="Initial hours">{@airplane.initial_hours} + +