J'ai une situation où un CourseSession
appartient à un Course
, qui appartient à un Program
. Dans mon contrôleur, j'aimerais obtenir le nom du programme de CourseSession. J'ai regardé autour et j'ai vu beaucoup de gens suggèrent d'utiliser la méthode joins
. Malheureusement pour moi cela n'a pas fonctionné dans mon cas. Je reçois cette erreur:Création d'une requête "joins" 2 associations up
Can't join 'CourseSession' to association named 'program'; perhaps you misspelled it?
Qu'est-ce que je fais mal?
@sessions = if params[:program]
CourseSession.joins(:course).joins(:program).where("program.name = params[:program]")
else
CourseSession.all
end
class Program < ApplicationRecord
has_many :courses, dependent: :nullify
end
class Course < ApplicationRecord
has_many :sessions, class_name: "CourseSession", inverse_of: :course, dependent: :destroy
belongs_to :program
end
class CourseSession < ApplicationRecord
belongs_to :course
end
Merci beaucoup. Je suis encore un peu nouveau à interroger, donc je dois demander; est-ce que je prends des coups de performance lorsque j'écris quelque chose qui se déplace dans la chaîne d'association? Si oui, auriez-vous des suggestions? –
Tant que vous avez index sur 'courses.program_id' et' course_sessions.course_id', vous devriez être bon. Ce n'est pas un rapport que j'imagine donc je pense que vous êtes en sécurité. – vee
Bon à savoir. Merci. Que voulez-vous dire par "rapport"? –