0
我最近遇到了ActiveRecord Relation的一些奇怪行爲。 假設,我有一個Stat
模型具有以下性的判定:ActiveRecord關係大小奇怪行爲
clicks
views
created_at
- 和其他
進一步假設我有以下範圍:
scope :aggregated, select('SUM(clicks) as clicks, SUM(views) as views).group('DATE(created_at)')
因此,我期望得到一個Stat對象的數組,並且每天都會彙總信息,所以它是這樣的。但是現在考慮這個問題:
# in one place
a = Stat.aggregated
#in other place
if a.size > 0
'do stuff'
else
'do other stuff'
end
而且如果a
關係加載,當未加載a
它失敗method undefined
錯誤它工作正常。 事實證明,當關系未加載大小調用count
在那個關係,實質上改變查詢,返回一個散列,並剎車的代碼。
這是一種隱含的行爲嗎?
對我來說,根據關係是否被加載,改變方法語義是一種反直覺。