在日期范围内搜索记录

时间:2014-04-22 21:12:24

标签: ruby-on-rails ruby

我的项目模型有start_dateend_date。我想过滤范围为start_yearend_year的项目。

目前的实施:

class Project < ActiveRecord::Base
  ...

  def self.date_range(start_year, end_year)
  end
end

2 个答案:

答案 0 :(得分:1)

假设你的start_date,end_date是所有DateTime对象和start_year,end_year只是年份的值,例如2013年,2014年等,查询应如下所示。

Project.where('EXTRACT(YEAR from start_date) <= ? AND EXTRACT(YEAR from end_date) >= ?', start_year, end_year)

答案 1 :(得分:0)

您可以使用AREL dsl来构建SQL查询,如下所示:

class Project < ActiveRecord::Base

  scope :in_date_range, ->(start_year, end_year) do
    where(arel_table[:start_date].gt(start_year).and(arel_table[:end_date].lt(end_year))
  end

end

然后像

一样使用它
Project.in_date_range(start, end)

将返回指定范围内的项目