Рельсы множественные ассоциации между двумя моделями - PullRequest
8 голосов
/ 05 апреля 2011

У меня есть модели Flight, Person и Glider в приложении Rails 3.Я определил пользовательские отношения, потому что мне нужно более одного внешнего ключа, ссылающегося на человека из таблицы рейсов.Ассоциации работают, но только ОДНОМ.

class Flight < ActiveRecord::Base
  belongs_to :pilot, :class_name => "Person"
  belongs_to :instructor, :class_name => "Person"
  belongs_to :towplane_pilot, :class_name => "Person"
  belongs_to :airplane_instructor, :class_name => "Person"

  belongs_to :glider
  belongs_to :rep_glider, :class_name => "Glider"

  belongs_to :departure_airfield, :class_name => "Airfield"
  belongs_to :arrival_airfield, :class_name => "Airfield"

end

class Glider < Aircraft
  has_many :flights
  has_many :replaced_flights, :foreign_key => "rep_glider_id", :class_name => "Flight"
end

class Person < ActiveRecord::Base
  has_many :flights, :foreign_key => "pilot_id", :class_name => "Flight"
  has_many :instructed_flights, :foreign_key => "instructor_id", :class_name => "Flight"
  has_many :towed_flights, :foreign_key => "towplane_pilot_id", :class_name => "Flight"
  has_many :instructed_towing_flights, :foreign_key => "airplane_instructor_id", :class_name => "Flight"
end


####What works#####
Flight.first.glider
Flight.first.rep_glider
Flight.first.pilot 
Flight.first.instructor 
Flight.first.towplane_pilot
Flight.first.airplane_instructor

Glider.first.flights 
Glider.first.replaced_flights    

####What doesn't work#### ----> NoMEthodError 'match'
Person.first.flights
Person.first.instructed_flights
Person.first.towed_flights.
Person.first.instructed_towing_flights

Я почти на месте, но я не понимаю, как Glider.first.flights работает, когда Person.first.flights нет.

ОБНОВЛЕНИЕ: Связи с «Аэродромом» работают ... поэтому я не знаю, почему он не работает с «Лицом»

class Airfield < ActiveRecord::Base
  has_many :takeoff_flights, :foreign_key => "departure_airfield_id", :class_name => "Flight"
  has_many :grounded_flights, :foreign_key => "arrival_airfield_id", :class_name => "Flight"
end

###Works Correctly

Airfield.first.takeoff_flights 
Airfield.first.grounded_flights

Flight.first.departure_airfield
Flight.first.arrival_airfield

Ответы [ 2 ]

0 голосов
/ 10 апреля 2011

Мне сказали, что связь между этими моделями установлена ​​правильно.

Я добавил новую запись в таблицу рейсов, и теперь ассоциации корректно работают с этой новой записью и всеми предыдущими. Я не совсем уверен, как это работает сейчас, но это точно работает.

0 голосов
/ 05 апреля 2011

У ваших пилотов есть типы?как столбец pilot_type?Я также только начал читать в этих видах паттернов, и, к счастью, они все еще немного свежи (надеюсь. Поправьте меня, если я прошёл рельс ниндзя!

http://asciicasts.com/episodes/154-polymorphic-association

...