tl; dr
- Wenn Sie wissen, dass Sie die Datennutzung nicht benötigen
count
.
- Wenn Sie wissen, dass Sie die Datennutzung verwenden oder verwendet haben
length
.
- Wenn Sie nicht wissen, was Sie tun, verwenden Sie
size
...
Anzahl
Beschließt, eine Select count(*)...
Abfrage an die Datenbank zu senden . Der richtige Weg, wenn Sie nicht die Daten, sondern nur die Anzahl benötigen.
Beispiel: Anzahl neuer Nachrichten, Gesamtzahl der Elemente, wenn nur eine Seite angezeigt werden soll usw.
Länge
Lädt die erforderlichen Daten, dh die Abfrage nach Bedarf, und zählt sie dann einfach. Der richtige Weg, wenn Sie die Daten verwenden.
Beispiel: Zusammenfassung einer vollständig geladenen Tabelle, Titel der angezeigten Daten usw.
Größe
Es prüft, ob die Daten geladen wurden (dh bereits in Schienen), wenn dies der Fall ist, und zählt sie dann einfach, andernfalls wird count aufgerufen. (plus die Fallstricke, die bereits in anderen Einträgen erwähnt wurden).
def size
loaded? ? @records.length : count(:all)
end
Was ist das Problem?
Dass Sie die Datenbank möglicherweise zweimal treffen, wenn Sie dies nicht in der richtigen Reihenfolge tun (z. B. wenn Sie die Anzahl der Elemente in einer Tabelle über der gerenderten Tabelle rendern, werden effektiv 2 Aufrufe an die Datenbank gesendet).
size
passt sich an die Situation sowieso, was dann notwendig ist , da fürlength
undcount
überhaupt?