2

我有一個學校對象和通過has_many :through, :uniq => true關係加入的用戶對象之間的ActiveRecord。爲什麼ActiveRecord objects.size返回錯誤的數字?

在學校上課,我有一個具體的方法來查詢學生:

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

這似乎正確地給我唯一的用戶只(無重複),但奇怪的是school.students.size給我包含重複記錄的計數!但是,如果我看一下school.students返回的enumerable,它只會顯示唯一的記錄。

我試着在where查詢的末尾添加一個#uniq。這似乎不能解決問題。到目前爲止,我唯一的解決方案是使用school.students.compact.size,但這是不對的。

順便說一句,school.users.size給了我一個準確的數。

+0

請問您可以分享一下嗎? – Rahul 2013-03-18 06:22:39

回答

0

您應該在ActiveRecord :: Relation對象上使用count,因爲它可以對數據庫進行計數查詢。調用size會導致從數據庫獲取所有對象,創建一個Array,然後在那上調用size。這可能不會解決您的問題。

創建另一個關聯是否有所作爲?

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

我會試試。 #長度可以正常工作,但#count不會。我猜測#size&#count不計數組的大小,而是在數據庫上進行計數查詢。 – Paul 2013-03-19 00:23:56

相關問題