[英]Rails 4 ActiveRecord has_many length condition
这个问题看起来很简单,但不知怎的,我无法用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)
不是直接回答您的实际问题,而是替代方案,但使用rails中的“counter_cache”功能可以大大提升关联数量:
class Student
belongs_to :school, :counter_cache => true
您还需要在schools表中添加'students_count'列,默认值为0.然后,当创建/删除关联时,此计数器会自动更新,并允许简单查询,如下所示:
School.where('students_count > ?, 0)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.