2010-04-26 15 views
12

Próbuję wymyślić najlepszy sposób na zapytanie o zakres dat od szyn ... Rozglądałem się w Google, ale nie jestem pewien, jak go użyć składnia.Szyny - próba zapytania z zakresu dat ... wszystko od dzisiaj

Mam model, który ma różne zdarzenia i chciałbym dodać do mojego warunku znajdowania zastrzeżenie, które powinno pokazywać tylko zdarzenia, w których pole: st_date jest dziś lub później, w efekcie pokazują mi tylko dane, które są aktualne, nic stało się przed dzisiejszym dniem.

Wystąpił problem, ponieważ nie mam daty zakończenia, aby zatrzymać zapytanie, chcę zapytać o wszystko od dzisiaj do następnego miesiąca.

myślałem coś takiego

@events = Event.find(:all, :conditions => ["start_date between ? and ?", 
     date.Today, date.next_month.beginning_of_month]) 

ale pojawia się błąd niezdefiniowanej zmiennej lokalnej lub metoda `data” ......

Czy muszę zrobić coś szczególnego użyć klasy Date ? A może coś jest nie tak z moją składnią zapytania? Naprawdę doceniłbym każdą pomoc.

Odpowiedz

15

Chcesz Date.today, not date.today. Nie ma nic złego z tym, co robisz, jesteś nie tylko przedstawieniu klasy Date prawidłowo

Ponadto byłoby Date.today.next_month.beginning_of_month

+0

dziękuję, jego najmniejsze rzeczy zwykle .... – ChrisWesAllen

6

Event.where(:start_date => Date.today..Date.today.next_month.beginning_of_month) również działa świetnie.

1

Spójrz na moją by_star plugin, który pozwala robić takie rzeczy jak:

Event.by_month(Time.now, :field => "start_date") 
14

wziąłbym go o krok dalej i określić zakres w modelu do ponownego użycia.

# rails 3 example: 
# app/models/event.rb 
scope :upcoming, lambda { 
    where("start_date between ? and ?", Date.today, Date.today.next_month.beginning_of_month) 
} 

# app/controllers/some_controller.rb 
@events = Event.upcoming 

Jest również doskonałym Railscasts epizod na teleskopach w Rails 3:
http://railscasts.com/episodes/202-active-record-queries-in-rails-3

+4

Twój zakres nie powinien zawierać symbol lambda {} tak, że daty te są oceniane w momencie użycia, a nie wtedy, gdy klasa jest ładowana? – craig

+0

masz rację - dziękuję Craig! – mrwade