Rails 3.1.3 Say, I have models and associations like models: Plan :flight_name_id: integer FlightName :departure_id :integer :destination_id :integer Place :city_id :integer City :name :string Plan 1--n FlightName n--1 Place n--1 City 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. Can anyone give me advice? soichi -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.
On 15 October 2012 08:08, Soichi Ishida <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> Rails 3.1.3 > > Say, I have models and associations like > models: > Plan :flight_name_id: integer > > FlightName :departure_id :integer > :destination_id :integer > > Place :city_id :integer > > City :name :string > > > Plan 1--n FlightName n--1 Place n--1 City > > > 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. Colin> > 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. > > Can anyone give me advice? > > soichi > > -- > Posted via http://www.ruby-forum.com/. > > -- > You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. > To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > For more options, visit https://groups.google.com/groups/opt_out. > >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.
> belongs_to :destination, :class_name => "Place", :foreign_key => > "destination_id" > belongs_to :departure, :class_name => "Place", :foreign_key => > "departure_id" >I didn''t know anything about ":foreign_key" option. I put class Place < ActiveRecord::Base has_many :flight_names, :foreign_key => :departure_id has_many :flight_names, :foreign_key => :destination_id end class FlightName < ActiveRecord::Base belongs_to :departure, :class_name => "Place", :foreign_key => :departure_id belongs_to :destination, :class_name => "Place", :foreign_key => :destination_id ... It works fine! Thanks Colin as always! soichi -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.
On 15 October 2012 10:30, Soichi Ishida <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:>> belongs_to :destination, :class_name => "Place", :foreign_key => >> "destination_id" >> belongs_to :departure, :class_name => "Place", :foreign_key => >> "departure_id" >> > > I didn''t know anything about ":foreign_key" option. > > I put > > class Place < ActiveRecord::Base > has_many :flight_names, :foreign_key => :departure_id > has_many :flight_names, :foreign_key => :destination_idThat 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? Colin> end > > class FlightName < ActiveRecord::Base > belongs_to :departure, :class_name => "Place", :foreign_key => > :departure_id > belongs_to :destination, :class_name => "Place", :foreign_key => > :destination_id > ... > > > It works fine! Thanks Colin as always! > > soichi > > -- > Posted via http://www.ruby-forum.com/. > > -- > You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. > To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > For more options, visit https://groups.google.com/groups/opt_out. > >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.
> 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_namesRails 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 -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.