Mam tablice wydarzeń (z datą startu i zakończenia), w widoku akcji index wydarzenia te mają być pogrupowane na Dziś, Tydzień od dziś, Miesiąc od dziś itp. w sumie 5 bloków.
I teraz, tworzyć nowe instancje np:
def index
@evens_today = Event.today
@evens_next_week = Event.next_week
@evens_next_month = Event.next_month
...
end
Bardzo wygodne dla mnie, ale to 5 zapytań do bazy.
Czy może pobrać wszystkie wydarzenia “@events = Event.all” i w widoku zrobić coś w stylu
<% @events.each do |event| %>
<%= render :partial => "events_list_item", :locals => { :event => event } if today(event)%>
<% end %>
i napisać helpery z warunkami które będą sprawdzać datę w każdym evencie i na jej podstawie renderować pratial z danym wydarzeniem, albo i nie.
Według mnie 5 zapytań do bazy będzie o wiele mniej kosztowne, niż przetwarzenie tego po stronie aplikacji.
Zastanawiam się czy najlepszym rozwiązaniem nie było by wywołanie namescopów bezpośrednio w widoku, np:
A benchmark jakiś stoi za takim stwierdzeniem czy tylko wydaje Ci się?
Niezależnie od wyniku benchmarku, nawet jeśli 5 zapytań do bazy będzie mniej kosztowne niż wyciągnięcie wszystkich które mogą nas interesować (Event.next_two_months.all, also: wątpię) i przetworzenie po stronie aplikacji, to potem – w miarę skalowania aplikacji – będziesz starał się jak najmniej robić w bazie (bo ją się najtrudniej skaluje), a jak najwięcej w aplikacji właśnie.
Wszystko zależy od tego ile tych eventów może być. Jeżeli będzie ich 100, to pobranie wszystkich i pogrupowanie w ruby nie powinno zająć dużo czasu. Jeżeli kilka tysięcy, to nie ma mowy o przenoszeniu czegokolwiek na aplikację. Ja bym się nie zastanawiał tylko zrobił 5 zapytań i jak kiedyś to się stanie bottleneckiem, to się tym zajmiesz.