如何使用ActiveRecord模型在日期范围内搜索?

16
我对Ruby和ActiveRecord都很陌生。我现在需要修改一段代码,在select语句中添加一个日期范围。当前的代码如下:
ReportsThirdparty.find(:all, :conditions => {:site_id=>site_id, :campaign_id=>campaign_id, :size_id=>size_id})

现在,我需要添加一个范围,但是我不确定如何使用BETWEEN>=<=运算符。 我猜我需要的是类似于:

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 注入攻击的影响。
1个回答

37

我相信你可以将一个Range对象传递给ActiveRecord的find方法,以获取你想要的内容:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接