活动记录:获取多个范围内的所有日期

时间:2016-12-03 22:50:26

标签: ruby-on-rails postgresql activerecord

在我的rails(使用postgresql)项目中,我有一个包含itemsstart_date字段的事件模型。事件日期范围不能重叠。我希望通过活动获得所有日期。

例如:

end_date

输出:

| event id | start_date | end_date   |
| :------: | :--------: | :--------: |
| 51       | 2011-09-27 | 2011-09-29 |
| 70       | 2014-07-23 | 2014-07-26 |
| 71       | 2014-06-30 | 2014-07-01 |
| 77       | 2016-03-10 | 2016-03-11 |

我尝试做很多事情并使用此代码获得结果:

[
  2011-09-27,
  2011-09-28,
  2011-09-29,
  2014-07-23,
  2014-07-24,
  2014-07-25,
  2015-08-26,
  2014-06-30,
  2014-06-31,
  2014-07-01,
  2016-03-10,
  2013-03-11
]

但我认为这很难看,是否有一种优雅的方式来解决我的问题?也许使用postgresql但我是postgresql的新手。

1 个答案:

答案 0 :(得分:0)

在模型event.rb

def get_dates
  [created_at, updated_at]
end

通过以下方式获取所有日期:

Event.all.map(&:get_dates).flatten

<强>更新

更改函数get_dates。

def get_dates
  (Date.parse(start_date.to_s)..Date.parse(end_date.to_s)).to_a
end