Mes modèles:Rails SQL gauche Rejoindre
class Student
has_many :grades
has_many :courses, :through => :grades
end
class Grades
belongs_to :student
belongs_to :course
end
class Course
has_many :grades
has_many :students, :through => :grades
end
Sur ma page vue, pour un étudiant, je dois montrer tous les cours et les notes associées (le cas échéant)
Student: Joe Blow
Course Grade
Sociology A
Biology B
Chemistry
...
J'utilise une jointure gauche pour traiter cette requête
@courses = Course.find(:all,
:joins => "as c left join grades g on c.id = g.grade_id and g.user_id = 1",
:select => "c.id, c.name, g.grade")
Quand je lance cette requête, s'il y a une note correspondant, tout va bien, mais s'il n'y a pas une note de correspondance pour un cours, même s'il retourne l'enregistrement du cours, il renvoie un zéro pour l'identifiant du cours, donc je suis étonné de savoir pourquoi. Si j'exécute une requête SQL directe, elle renvoie l'identifiant du cours pour tous les cours, quelle que soit la correspondance. J'utilise la méthode inspect pour voir les résultats
logger.debug @courses.first.inspect + ", " + @courses.first.grade.inspect
J'ai aussi remarqué une bizarrerie dans le grade référencement, dois-je utiliser au singulier ou au pluriel de qualité?
Utilisation: conditions et en ajoutant la g.user_id IS NULL ne fonctionne pas, il n'a pas choisi les cours sans grades correspondant. – Bob