我在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
给了我一个准确的计数。
答案 0 :(得分:0)
您应该在ActiveRecord :: Relation对象上使用count
,因为它允许它对数据库进行计数查询。调用size
会导致从数据库中获取所有对象,创建一个数组,然后在其上调用size
。这可能不会解决您的问题。
创建另一个关联是否有所作为?
has_many :students, class_name: User, through: SchoolUsers(?), conditions: {educations: {end_date: nil}}