2010-04-26 20 views
12

Estoy tratando de encontrar la mejor manera de consultar un rango de fechas desde los rieles ... Miré alrededor en Google pero no estoy seguro de cómo usarlo sintaxis.Rieles - Intentando consultar desde un rango de fechas ... todo desde hoy

Tengo un modelo que tiene varios eventos y me gusta agregar a mi condición de búsqueda una advertencia que solo debe mostrar los eventos donde el campo: st_date es hoy o más tarde, en efecto solo me muestra datos actuales, nada que sucedió antes de hoy.

Me encontré con un problema porque no tengo fecha de finalización para detener la consulta, quiero consultar todo desde hoy hasta el próximo mes.

que estaba pensando algo así como

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

pero me da la variable local indefinido error o método `date' ......

¿Es necesario hacer nada especial para utilizar la clase Date ? ¿O hay algo mal con la sintaxis de mi consulta? Realmente apreciaria cualquier ayuda.

Respuesta

15

Quiere Date.today, no date.today. No hay nada malo en lo que estás haciendo, no sólo que está haciendo referencia a la clase de fecha adecuadamente

Además, sería Date.today.next_month.beginning_of_month

+0

Muchas gracias, sus las cosas más pequeñas por lo general .... – ChrisWesAllen

6

Event.where(:start_date => Date.today..Date.today.next_month.beginning_of_month) también funciona muy bien.

1

Tome un vistazo a mi by_star plugin que te permite hacer cosas como:

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

Me gustaría ir un paso más allá y definir un ámbito en el modelo para su reutilización.

# 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 

También hay un episodio grandes Railscasts en ámbitos en los carriles 3:
http://railscasts.com/episodes/202-active-record-queries-in-rails-3

+4

no debe su alcance incluya el símbolo lambda} { para que las fechas se evalúen en el momento del uso, en lugar de cuando se carga la clase? – craig

+0

tienes razón, gracias craig! – mrwade

Cuestiones relacionadas