Sortowanie wyników

Witam

Chciałbym móc sortować wyniki na stronie index.rhtml utworzonej przez Scaffold-resource.

Czy ktos mógł by mi podpowiedzieć jak to zrobić??

Z góry dzięki

Jesli to scaffold wygenerowany, to mozesz wyedytowac twoj_controller.rb i w akcji list do metody find() dodac :order => ‘kolumna typ_sortowania’

Mozna np. tak:

[code]# application.rb
def order_from_sort_param(default)
params[:sort] ||= default
params[:sort].gsub(/_desc$/, " DESC") # mozna tez po prostu zastapic underscore spacja
end

application_helper.rb

def sort_class(param)
case params[:sort]
when param then “sortup”
when param + “_desc” then “sortdown”
else “nosort”
end
end

def sort_direction(param)
params[:sort] == param ? “#{param}_desc” : param
end

I przyklady uzycia:

posts/index.rhtml

<%= link_to "Aktualizacja", offers_path(:sort => sort_direction('updated_at')), {:class => sort_class('updated_at')} %>

posts.rb

Post.find …, :order => order_from_sort_param(‘id’) # defaultowe sortowanie ustawione na id[/code]
Ajaxowo jest analogicznie tylko link_to_remote, zawartosc tabeli w partialu np ‘_list.rhtml’ i w index.rjs page.replace :list, :partial => “list”, oczywiscie albo tag table albo div zawierajacy table powinien miec w tym przyp id ‘list’.

Mozna tez przesylac rezultat jako json, ale to bardziej ma sens np. w przyp. nanoszenia danych na istniejacy grid (terminarz spotkan, figury na szachownicy itp.)

Jezeli dodatkowo chcesz paginacji to pamietaj o uwzglednieniu tego parametru (sort) w query string linku paginatora (inaczej zgubisz sortowanie na nastepnych stronach tabeli). Mozesz oczywiscie przechowac order w sesji. Jak kto woli.