2011-01-16 6 views

Odpowiedz

26

Przypuszczam, że również nazwać rekord przedostatni:

@comments[-2] 

Here are the docs do interesującej operatora indeksu Ruby.


1. Rubiści, zauważcie, jak to połączyłem. Jeśli usuniesz wersję ze swoich linków z ruby-doc, referencja będzie trwała i aktualna.

3
@comments[-2] 

Jest niemal tak samo jak ostatnie pytanie.

1
@comments = Comment.all   #Gather all comments from DB, filter as necessary. 
@comments[-2]     #Second to last comment in array 
+1

To źle, jeśli masz ogromną bazę danych, zabijesz pamięć i zajmie to zbyt dużo czasu. Możesz to zrobić w konsoli, jeśli masz małego DB –

8

Z każdej tablicy Ruby, można podać dowolny zakres lub konkretnego indeksu, na przykład jeśli chciał każdy komentarz z drugim najstarszym na drugi Ostatnio można zrobić tak:

@comments[1..-2] 

i uzyskać tylko przedostatnia:

@comments[-2] 

Dokumentacja Ruby Array#range

w szynach, jeśli chciałeś dwie ostatnie komentarze, a następnie Yo u może ten, który zwraca tablicę z dwóch ostatnich zrobić:

@comments.last(2) 

Dokumentacja dla ActiveRecord::FinderMethods

+2

+1 dla 'last (2)'. Działa to dobrze, gdy jest używany bezpośrednio na modelu, bez konieczności wstępnego ładowania wszystkich rekordów do pamięci, np. 'Comment.last (2)'. –

4

może zawierać 1 lub więcej rekordów

To pytanie jest stary, ale dla ludzi dochodzimy do tego teraz ...

Inne rozwiązania zwrócą zero, jeśli istnieje tylko jeden rekord. Jeśli chcesz mieć pewność, że zwrócisz wykorzystanie rekordu:

@comments.last(2)[0] 
Powiązane problemy