Ruby on rails Rails两个模型之间的多个关联

Ruby on rails Rails两个模型之间的多个关联,ruby-on-rails,ruby-on-rails-3,activerecord,foreign-key-relationship,Ruby On Rails,Ruby On Rails 3,Activerecord,Foreign Key Relationship,我在Rails 3应用程序中有飞行、人和滑翔机模型。我定义了自定义关系,因为我需要多个外键引用flights表中的一个人。协会的工作只是单向的 class Flight < ActiveRecord::Base belongs_to :pilot, :class_name => "Person" belongs_to :instructor, :class_name => "Person" belongs_to :towplane_pilot, :class_nam

我在Rails 3应用程序中有飞行、人和滑翔机模型。我定义了自定义关系,因为我需要多个外键引用flights表中的一个人。协会的工作只是单向的

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
我快到了,但我不明白滑翔机。第一。当人。第一。航班不起作用时,航班是如何工作的

更新:与“机场”工程的关联。。。所以我不明白为什么它不适用于“Person”

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
class机场“起飞机场id”,:班次名称=>“航班”
有很多:停飞航班,:外国航班=>“抵达机场id”;:班次名称=>“航班”
结束
###工作正常
机场。第一。起飞
机场。第一。停飞的航班
第一次航班起飞\机场
第一次航班抵达机场

你的飞行员有类型吗?像一个飞行员式的专栏?我刚刚开始阅读这些模式,幸运的是它仍然有点新鲜(希望如此。如果我写的是rails忍者,请纠正我!)

您需要这里讨论的多态模式:


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


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

为了简单起见,我决定使用一个类,一个表的模型。我有一个属性“glider\u pilot\u status”,值为“none”、“培训生”和“pilot”;因此,当记录飞行时,模型验证“飞行员id”是一个具有“滑翔机飞行员状态”=“飞行员”的人。我会仔细研究你的建议,但我不知道为什么我发布的选项不起作用。使用多态性会非常有帮助,因为你使用的是不同的引导类型,但祝你好运!读完这篇文章后,我认为对于作者来说,有一个比多态性更好的解决方案。他可以使用单表继承,因为这三种类型的文章都有相同的属性,并且它们是互斥的(一篇文章不能是照片或事件,但不能同时是其中的两个)。就我个人而言,一个人可以是飞行员或实习生,但成为飞行员后,他也可以是拖网机飞行员和教练,所以相互排斥不是最适合我的,他们也有不同的属性。嗨,我与你的
飞行
滑翔机
个人
班级创建了一个小rails项目,对我来说,这很有效。我认为您的数据模型是解决您的问题领域的完美解决方案。你能指出确切的错误吗?nomethod错误从何而来?也许你的类有一个
after\u initialize
方法?奇怪的是,我刚刚又尝试了一次(在我的头撞到墙上三天后),现在它可以工作了。我在flights表中添加了一条新记录,关联可以正常工作,它们甚至可以与我保存的以前的航班一起工作。我不懂。感谢您的提醒,当我遇到类似问题时,我将尝试创建一个新的rails应用程序。我该如何回答这个问题?也许在这句话中加上我自己的答案?很高兴听到它现在也适用于你。不确定你应该怎么做:用那个评论回答还是删除?我认为这个问题是两个模型之间多重关联的一个有用的例子,所以我会把标题改成更有用的,然后用我的评论回答。你能发布你的数据库表吗?我是Rails新手,他们会很有帮助的。谢谢
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