2010-05-07 12 views
16

Tôi mới dùng cả Ruby và ActiveRecord. Tôi hiện đang có nhu cầu sửa đổi và đoạn mã hiện có để thêm phạm vi ngày trong lựa chọn. Các mảnh hiện tại đi như thế này:Làm cách nào để tìm kiếm giữa một phạm vi ngày, sử dụng mô hình ActiveRecord?

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

Bây giờ, tôi cần phải thêm một phạm vi, nhưng tôi không chắc chắn làm thế nào để làm BETWEEN hoặc >= hoặc <= nhà khai thác. Tôi đoán những gì tôi cần là một cái gì đó tương tự như:

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

Thậm chí nếu điều này đã làm việc, tôi biết rằng việc sử dụng nội suy ở đây sẽ để lại cho tôi chịu các cuộc tấn công SQL injection.

Trả lời

37

Tôi tin rằng bạn có thể vượt qua một đối tượng phạm vi để tìm ActiveRecord và có được những gì bạn muốn:

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

Edit: Nếu bạn đang sử dụng Rails 3 bạn có thể mong đợi để sử dụng một cái gì đó tương tự như:

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

Để biết thêm thông tin về Rails 3 Active Record truy vấn kiểm tra:
http://railscasts.com/episodes/202-active-record-queries-in-rails-3

+0

tuyệt đối hoàn hảo! Cảm ơn! –