тл; д-р
- Якщо ви знаєте, вам не потрібно буде використовувати дані
count
.
- Якщо ви знаєте, ви будете використовувати або використовували дані
length
.
- Якщо ви не знаєте, що робите, скористайтеся
size
...
рахувати
Вирішує надіслати Select count(*)...
запит до БД. Шлях, якщо вам не потрібні дані, а лише кількість.
Приклад: кількість нових повідомлень, загальна кількість елементів, коли відображатиметься лише сторінка тощо.
довжина
Завантажує потрібні дані, тобто запит, як потрібно, а потім просто підраховує їх. Шлях, якщо ви використовуєте дані.
Приклад: Підсумок повністю завантаженої таблиці, заголовки відображених даних тощо.
розмір
Він перевіряє, чи були дані завантажені (тобто вже в рейках), якщо так, то просто підраховує їх, інакше він рахує кількість. (плюс підводні камені, вже згадувані в інших записах).
def size
loaded? ? @records.length : count(:all)
end
В чому проблема?
Щоб ви могли вдаряти БД двічі, якщо ви не робите це в правильному порядку (наприклад, якщо ви виведете кількість елементів у таблиці поверх винесеної таблиці, фактично буде 2 виклики, надіслані до БД).
size
пристосовується до ситуації, то яка потреба в цьомуlength
іcount
взагалі?