2010-05-07 12 views
16

Soy nuevo en Ruby y ActiveRecord. Actualmente tengo la necesidad de modificar un fragmento de código existente para agregar un rango de fechas en la selección. La pieza actual es la siguiente:¿Cómo busco entre un rango de fechas, usando el modelo ActiveRecord?

ReportsThirdparty.find(:all, :conditions => {:site_id=>site_id, :campaign_id=>campaign_id, :size_id=>size_id}) 

Ahora, tengo que añadir una gran variedad, pero no estoy seguro de cómo hacer las BETWEEN o >= o <= operadores. Creo que lo que necesito es algo similar a:

ReportsThirdparty.find(:all, :conditions => {:site_id=>site_id, :campaign_id=>campaign_id, :size_id=>size_id, :row_date=>"BETWEEN #{start_date} AND #{end_date}") 

Incluso si esto no funcionaba, sé que el uso de la interpolación aquí me dejaría sujetos a ataques de inyección SQL.

Respuesta

37

Creo que se puede pasar un objeto Range para el hallazgo de ActiveRecord y obtener lo que quiere:

ReportsThirdParty.find(:all, 
    :conditions => { 
    :site_id => site_id, 
    :campaign_id => campaign_id, 
    :size_id => size_id, 
    :row_date => start_date..end_date }) 

Editar: Si estás usando Rails 3 se puede esperar para usar algo similar a:

ReportsThirdParty.where( 
    :site_id => site_id, 
    :campaign_id => campaign_id, 
    :size_id => size_id, 
    :row_date => start_date..end_date) 

Para obtener más información sobre Rieles 3 consultas de Active Record salida:
http://railscasts.com/episodes/202-active-record-queries-in-rails-3

+0

Absolutamente perfecto! ¡Gracias! –

Cuestiones relacionadas