如何使用“ where”获取具有XYZ属性的父级的父级

时间:2018-11-02 15:01:22

标签: ruby-on-rails

我正在使用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

2 个答案:

答案 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