代码之家  ›  专栏  ›  技术社区  ›  Russ Bradberry

如何使用activerecord模型在日期范围之间搜索?

  •  16
  • Russ Bradberry  · 技术社区  · 14 年前

    我对ruby和activerecord都不熟悉。我目前有一个需要修改和现有的一段代码,以添加一个日期范围的选择。现在的作品是这样的:

    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 回复  |  直到 11 年前
        1
  •  37
  •   Ian Vaughan    11 年前

    我相信你可以将一个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活动记录查询的更多信息,请查看:
    http://railscasts.com/episodes/202-active-record-queries-in-rails-3