Je me suis creusé le cerveau toute la journée et je n'arrive pas à le faire fonctionner. Je suis très nouveau à Ruby et rails ainsi mes excuses pour toutes les erreurs stupides.Active Record Table Jointures
Mon problème est de joindre 3 tables pour obtenir un objet @students. Cela fonctionne mais si j'appelle par exemple @ student.name alors 'name' n'existe pas.
Ci-dessous mon code:
contrôleur note que j'ai essayé d'utiliser .includes et .join et le même problème se produit.
class MyprojectController < ApplicationController
def show
@project = Project.find(params[:id])
@dateformat = '%b %e - %H:%M'
@user = Student.includes("INNER JOIN researchers ON students.researcher_id = researchers.id
INNER JOIN users ON researchers.user_id = users.id").where('user_id = ?', current_user.id)
end
Modèle utilisateur
class User < ApplicationRecord
include EpiCas::DeviseHelper
has_many :event_registrations
has_many :events, through: :event_registrations
belongs_to :project
has_many :researchers
#has_many :students, :through => :researchers
#has_many :supervisors, :through => :researchers
# def self.authenticate(username)
# where(username: username).first
# end
fin
Modèle de chercheur
class Researcher < ApplicationRecord
#belongs_to :project
belongs_to :user
has_many :supervisor
has_many :students
end
Modèle étudiantDonc, chaque étudiant a un ID chercheur et chaque chercheur a un id_utilisateur. Donc les jointures devraient aller à student-> researcher-> user et ensuite je veux pouvoir utiliser tous les attributs de toutes les tables dans un objet @user. J'ai essayé d'utiliser Student.join (: researcher,: user) mais j'ai essayé de faire une jointure de la table Student vers la table des chercheurs, puis j'ai essayé de rejoindre la table utilisateur en utilisant un user_id de la table des étudiants (mais de user_id est dans la table du chercheur). Donc, je viens de faire la requête moi-même.
Toutes les données semblent être présentes mais en tant que 'attributs bruts'.
Toute aide serait grandement appréciée!
-James
Lorsque vous faites plusieurs jointures dans ActiveRecord, alors il devient un peu loufoque d'accéder aux données. Il se peut que vous deviez y accéder via '@student [" nom "]' au lieu de la façon habituelle. – octopushugs
merci @octopushugs et je pense que vous êtes dans le bon sens mais cela n'a pas fonctionné :( –