I hope to explain my problem using the tables below:
university = University.where('class.name' => 'example', 'class.students.age' => '21').includes(:class, :student)
University
id
class.id
name
Class:
id
student.id
name
MaximumStudents
Student:
id
name
age
As you can see the University table references the Class table. The Class table references the Student table.
I want to get the universities that have a class called example and the students are aged 21. I know it weird but it shows my problem 😀
I can’t get my query to get hold of the Student. I always get the error “Association named ‘students’ was not found”
It works fine if I do the following without using the Student table
university = University.where('class.name' => 'example').includes(:class)
First of all, be advised that it’s not a good idea to name a model “Class” since that’s a reserved word in Ruby (for classes), which may cause trouble.
Aside from that: In the
Universitymodel, you need to specify a relation to theStudentmodel like this:Then you can get what you want with a relation like this: