Rails 两个模型之间的多重关联 [英] Rails multiple associations between two models

查看:22
本文介绍了Rails 两个模型之间的多重关联的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have Flight, Person, and Glider models in a Rails 3 app. I've defined custom relationships because I need more than one foreign key referencing a Person from the flights table. Associations work but ONE-WAY only.

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 不工作时工作.

I'm almost there, but I don't understand how Glider.first.flights does work when Person.first.flights doesn't.

更新:与Airfield"的关联有效...所以我不知道为什么它不适用于Person"

UPDATE: Associations with 'Airfield' works... so I'm clueless as to why it doesn't work with '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

推荐答案

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

I've been told that the association between these models is set correctly.

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

I added a new record to the flights table, and now the associations work correctly with this new record and all the previous ones. I'm not really sure how it is working now, but it sure does.

这篇关于Rails 两个模型之间的多重关联的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆