<%= render :partial => 'event', :collection => @events.sort_by(&:event_at)%>
Ten kod przedstawia kolekcję zamawianą jako ASC, ale chcę zamówić tę kolekcję jako DESC.Zamów kolekcję jako DESC
Jak mogę to osiągnąć?
<%= render :partial => 'event', :collection => @events.sort_by(&:event_at)%>
Ten kod przedstawia kolekcję zamawianą jako ASC, ale chcę zamówić tę kolekcję jako DESC.Zamów kolekcję jako DESC
Jak mogę to osiągnąć?
Co więcej, możesz ustawić zakres, aby posortować wydarzenie i użyć go w swoim renderingu.
w modelu zdarzenia:
scope :desc, order("events.event_at DESC")
Jeśli używasz Rails3 Państwa zdaniem można po prostu zrobić:
<%= render @events.desc %>
W zależności od rodzaju posiadanego obiektu będziesz mieć różne sposoby wykonywania funkcji sortowania.
Jeśli przedmiot jest ActiveRecord, można zrobić to w następujący sposób:
@events.order('events.event_at DESC')
Spowoduje to dodanie klauzuli ORDER
zapytaniu SQL, sortowania wpisów zanim je pobrać z bazy danych.
Drugie rozwiązanie jest wolniejsze, ponieważ sortujesz wpisy w ruby.
Ale jeśli manipulujesz szeregiem obiektów, to jest to jedyne rozwiązanie.
@events.sort {|a,b| b.event_at <=> a.event_at }
Ta pętla po wszystkich wydarzeniach, sprawdzając każdy z nich na największą jednego z metodą <=>
.
Możesz również zobaczyć the sort documentation na liście.
Przepraszamy, ale jestem nowicjuszem w rubinach i szynach. Co oznacza a, b oznaczać? Czy możesz napisać przykład z prawdziwymi imionami? Najlepiej jeśli events_at –
aib to dwa elementy tablicy. Określasz, że chcesz drugi przed pierwszym. –
Twój przykład powinien być: <% = render: partial => 'event',: collection => @ events.sort {| a, b | b.event_at <=> a.event_at}%> – Yannis
Można po prostu odwrócić kolekcję posortowaną:
<%= render :partial => 'event', :collection => @events.sort_by(&:event_at).reverse %>
, ale jak mówi Yannis, lepiej sortować, jak najlepiej pobrać dane z bazy danych.
To sprawiło, że działało. Ale chcę wypróbować inne przykłady uczenia się. –
W Rails 3 poprawna składnia jest:
<%= render :partial => 'event', :collection => @events.order(:event_at).reverse_order %>
jak opisano na http://guides.rubyonrails.org/active_record_querying.html
@events.order(event_at: :desc)
Jest to najlepsza odpowiedź dla Rails 3+, ponieważ wykonuje porządkowanie w bazie danych bez potrzeby pisania surowego kodu SQL. – DaveMongoose
Można to zrobić za pomocą desc
metodę z parametrem.
Poniżej przykład
@events.desc(:event_at)
To daje @events w porządku malejącym event_at
dziedzinie.
Dzięki.
Im używasz szyn 2.3.5 :( –
Wtedy nie ma problemu, po prostu dostosuj mój przykład: 'named_scope: desc,: order => (" events .event_at DESC ")' i '<% = render: partial => 'event',: collection => @ events.desc%>' – Yannis
Mam problem z błędem przy próbie tego. W event.rb w modelach napisałem named_scope : desc,: order => ("events.event_at DESC"), a następnie próbował wywołać go za pomocą <% = render: partial => 'event',: collection => @ events.desc%> ale dostałem komunikat o błędzie : undefined metoda 'desc 'dla # –