1.9.3p194 :002 > u = User.find_by_email("email@mail.ru")
1.9.3p194 :005 > u.addresses.size
=> 1
1.9.3p194 :006 > u.addresses.length
=> 1
1.9.3p194 :007 > u.addresses.count
Run Code Online (Sandbox Code Playgroud)
Rails 3.2.3中的大小,长度和计数没有区别,不是吗?
Che*_*her 43
length将加载所有对象以计算它们; 就像是:
select * from addresses...
Run Code Online (Sandbox Code Playgroud)
然后返回结果计数.你可以想象 - 这是糟糕的表现
伯爵只会发出
select count(*) from addresses...
Run Code Online (Sandbox Code Playgroud)
这是更好的,因为我们没有加载所有地址只是为了计算它们
size更聪明 - 它将检查关联是否已加载,如果为true则返回长度(不发出对数据库的调用).
如果您的用户模型中有一个名为address_count的字段,size也会检查counter_cache,那么size将使用此字段进行计数,因此无需在地址表上发出计数.
如果全部失败,大小将select count(*)在数据库上发出a
| 归档时间: |
|
| 查看次数: |
7976 次 |
| 最近记录: |