2011-10-09 16 views
5

Mam model, który zbiera dane finansowe od moich klientów w każdym kwartale kalendarzowym każdego roku (tak: kwartał 1, 2, 3 i 4 za dowolny: rok). Dla uproszczenia model nosi nazwę Kwartał i ma następujące atrybuty: identyfikator_klienta, kwartał, rok i: kwota. Chcę móc wysyłać zapytania i wyświetlać ostatnie cztery wpisy dla atrybutu: amount na podstawie aktualnie wyświetlanego kwartału.Szyny 3- Pobierz ostatnie N rekordów

Na przykład, jeśli patrzę na: kwartał 3 za: rok 2011, to chcę pokazać: kwotę za bieżący kwartał (co jest łatwe), a także kwotę: za kwartał 2 & 1 za: rok 2011, a: kwartał 4 za: rok 2010. Czy to ma sens?

Wykonałem tę pracę, przypisując inną zmienną do każdego rekordu, który chcę odzyskać, a następnie używając instrukcji elsif, aby go znaleźć, ale wiem, że musi to być czystszy sposób.

Jak to zrobić?

Odpowiedz

7

z interfejsem zapytań 2.x Rails Odpowiedź brzmi:

Quarter.find(:all, :order => :year, :limit => 4).reverse 

z interfejsem Rails zapytań 3.x Odpowiedź brzmi:

Quarter.order(:by => :year).limit(4).reverse 

btw. Myślę, że nie należy przechowywać danych w modelu o nazwie "Kwartał", ale raczej w modelu o nazwie "FinancialData" i mieć ten model, który ma atrybut "kwartał", który zawierałby 2011/1, 2011/2 lub dwa atrybuty : rok i: kwartał, które muszą być indeksowane razem

Zobacz także:

http://guides.rubyonrails.org/active_record_querying.html

http://m.onkey.org/active-record-query-interface

+0

Fajny człowiek, dzięki. Przepraszam, że jestem na tym naprawdę całkiem nowy, jak zatem mógłbym umieścić to w moim widoku, aby pokazać tylko wpisy dla atrybutu: amount? – FattRyan

+0

sprawdź na tej stronie: http://railscasts.com/ - ma naprawdę przydatne odcinki - niektóre na poziomie początkującym, niektóre na poziomie zaawansowanym. Może szukaj "Wyświetl" tam. – Tilo

+0

Jeszcze raz dziękuję Tilo. To, co zrobiłem, to po prostu przypisać zmienną do tego zapytania w moim kontrolerze, na przykład: @lastfouritems = zapytanie, a następnie wyświetlić tę zmienną w moim widoku. To co robi to pokazuje wszystkie atrybuty mojego modelu na ogromnej liście, zamiast tylko atrybutu: amount. Jak wyizolować ten jeden atrybut i pokazać tylko to? – FattRyan

6

do pobierania ostatnich n rekordy:

Quarter.last(n).reverse 
+0

Działa to dla szyn 4 i nowszych – SsouLlesS

1
User.all.order("id desc").limit(40)