2016-08-28 2 views
0

Est-il possible d'ajouter des références à une colonne différente de la colonne id?Ajouter des références à une colonne différente de l'ID

Habituellement, quand une relation entre deux modèles (Model1 et Model2) est créé, l'utilisation de model1:references et model2:references pour la création du modèle de relation ajoute automatiquement un model1_id et model2_id colonne (avec un index et une référence clé étrangère) pour une utilisation dans l'association modèle1/de model2:

rails generate Relationship model1:references model2:references 

Say par exemple Model1 = Teacher et Model2 = Pupil. Supposons que les enregistrements de Model2 (enregistrements élèves) soient mis à jour de temps en temps avec une tâche rake: les valeurs de ses attributs (par exemple name et school_credits) changeraient, en préservant id et ranking (1 à 100).

Associez un professeur avec un pupil_id n'aurait pas beaucoup de sens.
Chaque enseignant devrait être associé aux noms de ses élèves en utilisant comme référence de clé étrangère l'attribut pupil.name au lieu de pupil.id.

Est-ce possible?
Quelles options puis-je ajouter à la commande rails generate Relationship ou à quelle reference dois-je ajouter pour avoir ce résultat?

+0

Si vous associez un élève avec un nom et que le nom de l'élève est changé, comment détermineriez-vous l'association? –

+0

Say id 1 rang 1 est Paul avec 100 crédits, 1d 2 rang 2 est Kevin avec 90 crédits et id 3 rang 3 est Lea avec 80 crédits. Si Léa gagne 30 crédits, ID 1 est mis à jour avec le nom Léa et 110 crédits. Paul et Kevin changent aussi. Si Lea est l'élève de teacher1, teacher1 devrait être associé à Lea et pas à l'id 3. – Asarluhi

Répondre

1

Oui, vous pouvez. Vérifiez les sections sur foreign_key et primary_key à partir du link suivant. Je n'utilise pas de générateur, donc je ne peux pas commenter les options à passer dans le générateur, mais vous devez juste vous assurer que la colonne à utiliser comme clé étrangère existe dans votre table et que vous assignez foreign_key dans les fichiers du modèle.

Mais pourquoi en avez-vous besoin? Je ne comprends pas quel genre de cas d'utilisation vous pourriez avoir qui vous obligerait à garder id et le classement identique.

+0

Prenez par exemple le classement Wta (tennis féminin). Ils sont mis à jour chaque semaine. Vous pouvez utiliser nokogiri pour mettre à jour les noms et les points recherchant le classement. Il est difficile de garder trace des joueurs de tennis classés sur 100 (c'est-à-dire ceux qui sortent des 100 premiers). – Asarluhi