16

私はRubyとActiveRecordの両方に不慣れです。現在、選択に日付範囲を追加するために既存のコードを変更する必要があります。現在の作品は次のようになります。

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

BETWEENここで、範囲を追加する必要がありますが、 or>=または<=演算子の実行方法がわかりません。私が必要としているのは次のようなものだと思います:

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

これが機能したとしても、ここで補間を使用すると、SQL インジェクション攻撃の対象になることはわかっています。

4

1 に答える 1

37

RangeオブジェクトをActiveRecordの検索に渡して、必要なものを取得できると思います。

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

編集:Rails 3を使用している場合は、次のようなものを使用することが期待できます。

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

Rails 3 Active Recordクエリの詳細については、http:
//railscasts.com/episodes/202-active-record-queries-in-rails-3をご覧ください。

于 2010-05-07T17:48:23.057 に答える