我有一个Rails 3应用程序中的Flight,Person和Glider模型。我定义了自定义关系,因为我需要从航班表引用一个以上的外键。协会工作,但只有一种方式。两个模型之间的轨道多个关联
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
没有。
UPDATE:协会以“飞机场”的作品...所以我无能,为什么它不与“人”
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
嗨,我用你的'Flight','Glider'和'Person'类创建了一个小型的rails项目,对我来说它只是起作用。 我认为你的数据模型是你问题领域的完美解决方案。 你能显示确切的错误吗? nomethod错误来自哪里?也许你的班级有'after_initialize'方法? – nathanvda 2011-04-10 10:47:53
奇怪的是,我只是再次尝试(三天后,我的头靠在墙上),它现在起作用。我在航班表中添加了新记录,并且协会正常工作,他们甚至可以使用我以前保存的航班。我无能为力。感谢您的支持,当我遇到类似问题时,我会尝试创建一个新的Rails应用程序。我应该如何回答这个问题?也许用这个评论添加我自己的答案? – bruno077 2011-04-10 14:52:11
很高兴听到它现在也适用于你。不知道你应该做什么:用该评论回答或删除它? – nathanvda 2011-04-10 16:03:10