2010-05-07 16 views
16

Hem Ruby hem de ActiveRecord için yeniyim. Şu anda, seçimde bir tarih aralığı eklemek için mevcut kod parçasını değiştirmeye ihtiyacım var. Geçerli parça şöyledir:ActiveRecord Modelini Kullanarak Bir Tarih Aralığı Arasında Nasıl Arama Yaparım?

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

Şimdi, bir aralığı eklemek gerekir, ama BETWEEN veya >= veya <= operatörlerini nasıl emin değilim. Ne ihtiyacım benzer bir şey olduğunu tahmin:

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

bu işi bile, burada interpolasyon kullanarak SQL enjeksiyon saldırıları beni tabi terk edeceğini biliyoruz.

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

Edit:

cevap

37

Sana ActiveRecord en find bir Range nesnesi geçmek ve istediğini elde edebilirsiniz inanıyoruz

ReportsThirdParty.where( 
    :site_id => site_id, 
    :campaign_id => campaign_id, 
    :size_id => size_id, 
    :row_date => start_date..end_date) 
: Eğer Rails 3 kullanıyorsanız, benzer bir şey kullanmak bekleyebilirsiniz Raylar 3 Active kayıt sorguları hakkında daha fazla bilgi için

check out:
http://railscasts.com/episodes/202-active-record-queries-in-rails-3

+0

Kesinlikle mükemmel! Teşekkürler! –