Kilka ostatnich z db

Mam takie pytanko, czy jest jakis elegancki sposob by wypisac np 5 ostatnich wpisow z bazy danych.

Chodzi o to ze mam powidzmy kiladziesiat roznych tabel w bazie i kazda ma pole created_at wiec mozna teoretycznie z kazdej w najgorszym przypadku zrobic selecta 5 ostatnich wpisow i wtedy je wszytskie po tym polu porownac i 5 najnowszych wybrac. Tylko malo to eleganckie i zapytanie sql bedzie kosmiczne. Nie ma moze jakiegos gema czy rozwiazania gotowego, by najswiezsze rzeczy wypisac?

E tam kosmiczne. Posortować po created_at (:order => “created_at DESC”) i wybrać 5 (:limit => 5)

no o tym pisze ale to bedzie ze 20-30 zapytan chyba ze zle mysle?

@a = Image.find(:all, :order => 'created_at DESC', :limit => 5) @b = Posts.find(:all, :order => 'created_at DESC', :limit => 5) @c = Text.find(:all, :order => 'created_at DESC', :limit => 5) (...)
no w sumie lepiej w tablicy jakiejs i wtedy sortowaie jakies i 5 wybrac np

tylko czy to na pewno najlepszy sposob

Lepiej jedno zapytanie z union gdzie wrzucisz te 20 zapytań do konkretnych tabel i na tym zapytaniu limit. Ogólnie im mniej danych wyciągasz z bazy tym lepiej, lepiej mieć 5 rekordów niż 100 tylko po to żeby je potem lokalnie sortować.

no tak w sumie racja, tylko problem moze byc ze z kazdej tabeli rozne dane potzrebuje, no kazda ma created_at i id, ale w sumie jakies nazwy itp by jakies linki sensowne z tego wygenerowac ;/ ech porywam sie chyba z motyka na slonce:p

Ja bym nie kombinował, bo to pewnie będzie ekran dla 1-2 userów (adminów).
I może jednak nie chcesz wyrzucać wszystkich modeli. Bo select to jedno, ale potem jeszcze trzeba toto wyświetlić… i się za*^#%ać kodując widoki :wink:

no wlasnie o to wyswietlnie mi chodzi a panel ma byc dla wszystkich, taki zakatek w ktorym bedzie sie pojawiac co ostatnie killka zmian na stronie.

Czyli strona ma news, forum, zdjecia, teksty, … i ma sie w panelu bocznym pokazywac 5 ostatnich zmian w ogole na stronie. Taki luzny pomysl. Jak na razie mi sie odechciewa wiec pewnie oleje to.

Z widokami można to całkiem prosto zrobić. Jeśli w @results będziemy mieli sumę wszystkich rezultatów, to piszemy:

<%= render :partial => @results %>

I teraz “tylko” :wink: wystarczy dla wszystkich modeli zrobić odpowiednie pliki:

images/_image.html.erb posts/_post.html.erb
I kolekcja z różnych elementów będzię się ładnie “sama” renderowała.

Imho te wszystkie modele powinienes spiąć w modelu Resource. Poczytaj o polimorfii (*_id i *_type). i potem po prosturobił selecta z modelu Resource. W Agile Web Development jest przykład

Ok agaile mam gdzies zajrze, z tymi partialami zajebisty pomysl o tym nie myslalem ;] czemu nie ;]