Rails两个模型之间的多个关联

bru*_*077 8 activerecord ruby-on-rails foreign-key-relationship ruby-on-rails-3

我在Rails 3应用程序中有Flight,Person和Glider模型.我已经定义了自定义关系,因为我需要多个外键引用来自flight表的Person.协会只能以单向工作.

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
Run Code Online (Sandbox Code Playgroud)

####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
Run Code Online (Sandbox Code Playgroud)

我几乎在那里,但我不明白Glider.first.flightsPerson.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
Run Code Online (Sandbox Code Playgroud)

bru*_*077 0

我被告知这些模型之间的关联设置正确。

我在航班表中添加了一条新记录,现在关联可以正确处理这条新记录和所有以前的记录。我不太确定它现在是如何工作的,但它确实可以。