Apparently, a flight_name has connections to TWO places, where one of
them refers to departure_id and another to destination_id.
Corresponding place.id’s are stored in them.
In a view, I would like to generate City.name’s (string) for both
departure place and destination place.
My question is: How can I achieve this?
in a view (html.erb template)
plan.flight_name.plan
gives an error, “undefined method `place’ for” obviously.
I am guessing that a custom method needs to be defined in order to pull
out City,name from a Plan.
Apparently, a flight_name has connections to TWO places, where one of
them refers to departure_id and another to destination_id.
Corresponding place.id’s are stored in them.
Show us the class definitions with has_many and belongs_to
specifications. If the problem is that you do not know how to specify
two places in the flight name then you need to do something like
class Flightname
belongs_to :destination, :class_name => “Place”, :foreign_key =>
“destination_id”
belongs_to :departure, :class_name => “Place”, :foreign_key =>
“departure_id”
Then you can say flightname.destination and flightname.departure. You
also have to put two equivalent has_many definitions in class Place.
Have a look at the rails guide on activerecord associations and the
rails docs for more details.
class Place < ActiveRecord::Base
has_many :flight_names, :foreign_key => :departure_id
has_many :flight_names, :foreign_key => :destination_id
That won’t work properly when you come to do place.flight_names,
though the code you have so far may be ok. You did not look at the
examples in the guide carefully enough. Check out section 2.10 and
you will see that you need something like
has_many :departure_flight_names, :class_name => “FlightName”,
:foreign_key => :departure_id
has_many :destination_flight_names, :class_name => “FlightName”,
:foreign_key => :destination_id
then you can say place.departure_flight_names and
place.destination_flight_names
Though I am not sure about your choice of class name as FlightName.
Should it not just be Flight or something similar?
That won’t work properly when you come to do place.flight_names,
though the code you have so far may be ok. You did not look at the
examples in the guide carefully enough. Check out section 2.10 and
you will see that you need something like
has_many :departure_flight_names, :class_name => “FlightName”,
:foreign_key => :departure_id
has_many :destination_flight_names, :class_name => “FlightName”,
:foreign_key => :destination_id
then you can say place.departure_flight_names and
place.destination_flight_names
Rails is amazingly fun to deal with…Now I have learned a lot. Thanks.
Though I am not sure about your choice of class name as FlightName.
Should it not just be Flight or something similar?
FlightName only contains integer identification codes, and Flight
includes Airline.company and Date as well, which are not apparent in
this thread. So it’s OK.
Thanks, though.
soichi
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.