J'ai des modèles Flight, Person et Glider dans une application Rails 3. J'ai défini des relations personnalisées car j'ai besoin de plus d'une clé étrangère référençant une personne à partir de la table des vols. Les associations fonctionnent mais UNIQUEMENT.Rails multiples associations entre deux modèles
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
Je suis presque là, mais je ne comprends pas comment fonctionne le Glider.first.flights
quand Person.first.flights
ne fonctionne pas.
MISE À JOUR: Les associations avec « l'aérodrome » fonctionne ... donc je suis désemparés quant à pourquoi il ne fonctionne pas avec « personne »
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
Salut, j'ai créé un petit projet de rails avec vos classes 'Flight',' Glider' et 'Person', et pour moi ça marche. Je pense que votre modèle de données est une solution parfaite pour votre problème. Pourriez-vous montrer l'erreur exacte? D'où vient l'erreur de nom de code? Peut-être que votre classe a une méthode 'after_initialize'? – nathanvda
Etrangement, j'ai juste essayé à nouveau (après trois jours de me cogner la tête contre le mur) et ça marche maintenant. J'ai ajouté un nouveau record dans la table des vols et les associations fonctionnent correctement, et ils fonctionnent même avec les vols précédents que j'avais enregistrés. Je suis désemparé. Merci pour les heads up, je vais essayer de créer une nouvelle application rails quand j'ai un problème similaire. Comment devrais-je répondre à cette question? Peut-être ajouter ma propre réponse avec ce commentaire? – bruno077
Ravi de l'entendre travailler pour vous maintenant. Vous ne savez pas ce que vous devriez faire: répondez-y avec ce commentaire ou supprimez-le? – nathanvda