0

Mon modèle de séminaire comporte une colonne nommée ID_enseignant. Cette partie de la relation fonctionne. Je peux appeler seminar.teacher pour récupérer l'utilisateur qui enseigne ce séminaire.Obtenir l'association du nom personnalisé

J'aimerais pouvoir inverser cette requête. En d'autres termes, je dois appeler teacher.own_seminars pour obtenir une collection de tous les séminaires où cet utilisateur est listé comme teacher_id. Je sais que je pourrais appeler Seminar.where (: enseignant => enseignant), mais c'est maladroit. Et je pense que la performance est probablement pire de cette façon.

Remarque: Certains des utilisateurs sont des étudiants qui sont liés à Seminar via la table de jointure seminar_user, mais je ne pense pas que cela affecte cette question.

Ceci est la configuration du modèle qui ne fonctionne pas encore tout à fait

class User < ApplicationRecord 
    has_many  :own_seminars, :class_name => "Seminar", foreign_key: 'own_seminar_ids' 
end 



class Seminar < ApplicationRecord 
    belongs_to :teacher, class_name: "User", foreign_key: 'teacher_id' 
end 

Cheers!

Répondre

2

Dans l'option foreign_key, vous spécifiez la colonne qui est, bien, la clé étrangère .

Le fonctionnement de has_many est de tenter de deviner lequel des champs de l'entité référencée correspond à la clé primaire de cette entité. Par défaut, il s'agit de user_id (dérivé du nom User). Mais puisque votre colonne est réellement appelée teacher_id, vous devriez l'utiliser à la place.

has_many :own_seminars, 
     class_name: "Seminar", 
     foreign_key: 'teacher_id'