Rails 4 ActiveRecord has_many长度条件

时间:2014-11-17 16:11:53

标签: ruby-on-rails ruby rails-activerecord

这个问题看起来很简单但不知何故我无法用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)

1 个答案:

答案 0 :(得分:1)

不能直接回答您的实际问题,而是替代方案,但使用rails中的“counter_cache”功能可以大大提升关联数量:

class Student
  belongs_to :school, :counter_cache => true

您还需要在schools表中添加'students_count'列,默认值为0.然后,当创建/删除关联时,此计数器会自动更新,并允许简单查询,如下所示:

School.where('students_count > ?, 0)