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