这个问题看起来很简单但不知何故我无法用ActiveRecord查询包围它:
我有两个一对多的关系
class Student
belongs_to :school
end
class School
has_many :students, inverse_of: :school
end
我想创建一个范围来取得所有有学生的学校(换句话说,他们的学生收藏规模大于0)。
我知道如何在SQL中写这个,但ActiveRecord让我受到了冲击。 我确实设法用这一行来实现这种行为:
School.joins(:students)
但我仍然想知道在哪里可以指定条件,例如:
School.where("students.length > ?", 0)
答案 0 :(得分:1)
不能直接回答您的实际问题,而是替代方案,但使用rails中的“counter_cache”功能可以大大提升关联数量:
class Student
belongs_to :school, :counter_cache => true
您还需要在schools表中添加'students_count'列,默认值为0.然后,当创建/删除关联时,此计数器会自动更新,并允许简单查询,如下所示:
School.where('students_count > ?, 0)