2010-04-26 11 views
12

Sto cercando di capire il modo migliore per interrogare un intervallo di date dai binari ... Mi sono guardato intorno su Google ma non sono sicuro su come utilizzare questo sintassi.- Tentativo di interrogare da un intervallo di date ... tutto da oggi

Ho un modello che ha vari eventi e mi piace aggiungere alla mia condizione di ricerca un avvertimento che dovrebbe mostrare solo eventi in cui il campo: st_date è oggi o più tardi, in effetti mi mostra solo i dati che sono correnti, niente che è successo prima di oggi.

Ho riscontrato un problema perché non ho una data di fine per interrompere la query, voglio interrogare tutto da oggi al mese prossimo.

Stavo pensando qualcosa di simile

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

ma ho l'errore non definito variabile locale o un metodo `date' ......

Devo fare qualcosa di particolare per utilizzare la classe Date ? O c'è qualcosa di sbagliato nella sintassi della mia query? Gradirei davvero qualsiasi aiuto.

risposta

15

Si desidera Data.oggi, non data.oggi. Non c'è niente di sbagliato in quello che stai facendo, non sei solo riferimento alla classe data correttamente

Inoltre sarebbe Date.today.next_month.beginning_of_month

+0

Grazie mille, le sue più piccole cose di solito .... – ChrisWesAllen

6

Event.where(:start_date => Date.today..Date.today.next_month.beginning_of_month) funziona alla grande anche.

1

Date un'occhiata al mio by_star plugin che permette di fare le cose come:

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

vorrei prendere un ulteriore passo avanti e definire un ambito nel modello per il riutilizzo.

# 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 

C'è anche un episodio di grande Railscasts su ambiti in Rails 3:
http://railscasts.com/episodes/202-active-record-queries-in-rails-3

+4

non dovrebbero includere l'ambito lambda {} simbolo in modo che le date siano valutate al momento dell'utilizzo, piuttosto che quando viene caricata la classe? – craig

+0

hai ragione - grazie craig! – mrwade

Problemi correlati