Tengo modelos de vuelo, persona y planeador en una aplicación de Rails 3. Definí las relaciones personalizadas porque necesito más de una clave externa que haga referencia a una persona de la tabla de vuelos. Las asociaciones funcionan solo en UN SOLO CAMINO.Rieles asociaciones múltiples entre dos modelos
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
Estoy casi allí, pero yo no entiendo cómo funciona cuando Glider.first.flights
Person.first.flights
no.
ACTUALIZACIÓN: Asociaciones con '' el campo de aviación funciona ... así que no tengo ni idea de por qué no funciona con 'Persona'
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
Hola, creé un pequeño proyecto de rieles con su clase 'Flight',' Glider' y 'Person', y para mí simplemente funciona. Creo que su modelo de datos es una solución perfecta para su área problemática. ¿Podría mostrar el error exacto? ¿De dónde viene el error nomethod? ¿Tal vez tu clase tiene un método 'after_initialize'? – nathanvda
Extrañamente, lo intenté de nuevo (después de tres días de golpear mi cabeza contra la pared) y funciona ahora. Agregué un nuevo registro en la tabla de vuelos y las asociaciones funcionan correctamente, e incluso funcionan con los vuelos anteriores que había guardado. No tengo idea. Gracias por el aviso, intentaré crear una nueva aplicación de rieles cuando tenga un problema similar. ¿Cómo debería responder esta pregunta? Quizás agregue mi propia respuesta con este comentario? – bruno077
Me alegra saber que también funciona para ti ahora. No estoy seguro de lo que debe hacer: ¿responderlo con ese comentario o eliminarlo? – nathanvda