Temat nie brzmi przejrzyscie, ale jak zwykle problem przedstawie na przykladzie.
Mam ksiazeczki, ktore sa powiazane ze stronami.
[code]#kontroler @book = Book.find(params[:id])
#widok
<% for page in @book.pages%>
<%= page.name%>
<% end %>[/code]
W widoku wyswietlam wszystkie strony. Railsy je sortuja od najstarszej do najwnoszej. Ale chcialbym w kolejnosci odwrotnej. Najprosciej wyszukac wedlug stron, a nie wedlug ksiazek i tam dac order_by. Ale nie o takie rozwiazanie mi chodzi. Chcialbym posortowac @book.pages na zasadzie:
#widok
<% for page in @book.pages.order_by("created_at ASC")%>
<%= page.name%>
<% end %>
Tyle, ze oczywiscie railsy tego nie łykają. Jest jakas dogodna metoda na to?
możesz sortować w całości po stronie klienta – wtedy otwierasz Ruby’ową dokumentację Array#sort z podaniem bloku i sortujesz po atrybucie jakim chcesz; wada – wydajność, nieeleganckie (od tego jest baza!)
class Book
has_many :pages, :order => “created_at ASC”
Zły, zły pomysł – baza SQL bez podania ORDER BY zwraca wyniki w niesprecyzowanej kolejności – konkretnie w kolejności dla siebie “najwygodniejszej”, co przy samym dodawaniu rekordów oznacza faktycznie kolejność chronologiczną ich dodawania. Ale już edycja (UPDATE) dowolnego rekordu spowoduje jego pojawienie się na nieokreślonym miejscu, z reguły na jednym z końców listy.
no no wiadomo, to byla tylko uwaga ze takie cos jest ze jak masz juz jakas kolejnosc sortowania ustalona i wykorzystujesz to w kilku miejscach, a w jednym chcesz w odwrotnej kolejnosci, to jest takie cos
Nie jest złe, nie doczytałem dokumentacji, mój błąd (wydawało mi się że zachowa się jak podselecty, tj. zwróci wiele kopii tego samego wiersza tylko z innym doasocjowanym). Nieważne
def order_by(order_type)
self.find(:all, :order => order_type)
end
albo wręcz named_scope order_by to będzie jeszcze czyściej… ale oczywiście include jest wydajniejsze itd…
Weź się wyśpij po tym urlopie, jak jutro zalogujesz i przeczytasz swojego posta to się złapiesz za głowę
(są w nim błędy od koncepcyjno-projektowych po czysto programistyczne )
Omg - faktycznie Przyjechałem w środku nocy po 8h jazdy i się zabrałem za “coś pożytecznego” to widać skutki Gorzej że w innym temacie zrobiłem plugin do SWF Web by Google i teraz nie mam nawet czasu sprawdzać jak bardzo powalony tam jest kod(bo to pisałem jeszcze o 1.30 a tamto o 4 nad ranem )