为什么ActiveRecord objects.size返回错误的数字?

时间:2013-03-18 03:08:26

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

我在School对象和通过has_many :through, :uniq => true关系连接的User对象之间有一个ActiveRecord。

在学校课堂上,我有一个特定的方法来查询学生:

def students
  self.users.where(educations: {end_date: nil})
end

这似乎正确地给了我唯一的用户(没有重复),但奇怪的是school.students.size给了我一个包含重复记录的计数!但是,如果我查看school.students返回的可枚举,它只显示唯一的记录。

我尝试在where查询的末尾添加#uniq。这似乎没有解决问题。到目前为止,我唯一的解决方案是使用school.students.compact.size,但这可能不对。

顺便说一下,school.users.size给了我一个准确的计数。

1 个答案:

答案 0 :(得分:0)

您应该在ActiveRecord :: Relation对象上使用count,因为它允许它对数据库进行计数查询。调用size会导致从数据库中获取所有对象,创建一个数组,然后在其上调用size。这可能不会解决您的问题。

创建另一个关联是否有所作为?

has_many :students, class_name: User, through: SchoolUsers(?), conditions: {educations: {end_date: nil}}