In this step, given a model object with one or more association links to other objects, you will learn how to retrieve the other objects using the Rails model API.
Recall that our Flight
and Airport
objects are currently configured as follows (as per the seeds.rb
script):
We will use the association link(s) connecting Flight
and Airport
objects to demonstrate how, given one linked object, we can retrieve the object(s) on the other end of the link(s).
Launch the Rails console:
rails console
Flight
object, retrieve its associated Airport
objectRetrieve a Flight
object by entering this Ruby code into the console. We happen to choose the first Flight
object in the database (but this choice is not important here).
my_flight = Flight.first
Pretty print the retrieved Flight
object:
my_flight
Note that the object retrieved is the mem_atl
object from the seeds.rb
script, also depicted in object diagram above. Also note that this Flight
object has an association link with the Airport
object atl
.
Retrieve this Flight
object’s associated departure Airport
object by entering into the console this call to the departure_airport
method:
my_airport = my_flight.departure_airport
Note that we declared the departure_airport
method in the Flight
class belongs_to
declaration (see the previous step).
Pretty print the retrieved Airport
object:
my_airport
Note that, as expected, the Airport
object mem
was retrieved by the departure_airport
method call.
Airport
object, retrieve its associated Flight
objectsWe will use the my_airport
object, which references the mem
object in the above object diagram. As per the diagram, mem
has association links with the Flight
objects mem_atl
and mem_lax
, so these will be the two objects we expect to retrieve.
Retrieve the flights that depart from the airport my_airport
by entering into the console this call to the departure_flights
method:
my_flight_array = my_airport.departure_flights
Note that we declared the departure_flights
method in the Airport
class has_many
declaration (see the previous step).
Pretty print the retrieved Flight
array:
my_flight_array
Note that an array containing two Flight
objects was retrieved. As expected, the two objects are mem_atl
and mem_lex
from the above object diagram. Be aware that has_many
-generated methods, like departure_flights
, will always return an array of objects (versus a single object like belongs_to
-generated methods).
Given that my_flight_array
references an array, we can process each object in the array using an each
loop. For example, print the departure time for each flight in the array by entering this Ruby code into the console:
my_flight_array.each do |f|
puts 'DEPARTURE TIME: ' + f.departure_time.to_s
end
Note that the departure time for each Flight
object in the my_flight_array
array is printed.
Keep the console running, as we will continue to use it in the next step.