我正在使用ajax-datatables-rails
来获取作为父模型的子代的记录。
例如,我有一个名为School
的父模型,它有很多teachers
,每个都有很多students
。
如果我使用的是Student.joins(:teacher)
,但老师属于学校,那么我该怎么写,以便它只拉回属于某所学校的老师的学生。
尽管我知道这不是正确的语法,但我正在尝试找到一种方法来做类似的事情:Student.joins(:teacher => [:school where school_name == "hello world"])
。
这是模型结构:
# app/models/school.rb
class School < ApplicationRecord
has_many :teachers
end
。
# app/models/teacher.rb
class Teacher < ApplicationRecord
belongs_to :school
has_many :students
end
。
# app/models/student.rb
class Student < ApplicationRecord
belongs_to :teacher
end
答案 0 :(得分:1)
首先执行联接,然后根据您感兴趣的表进行过滤:
Student.joins(teacher: :school).where(schools: { name: "hello world" })
答案 1 :(得分:0)
您还可以使用has_many through
关联来实现此目的。 Reference
app / models / school.rb
class School < ApplicationRecord
has_many :teachers
has_many :students, through: :teachers
end
app / models / teacher.rb
class Teacher < ApplicationRecord
belongs_to :school
has_many :students
end
app / models / student.rb
class Student < ApplicationRecord
belongs_to :teacher
end
因此,假设您想让某个特定学校的学生名单可以查询。
School.find_by_name('ABC School').students