在我的rails(帶有postgresql)項目中,我有事件模型start_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
]
我嘗試做了很多,與此代碼得到的結果:
Event
.pluck(:start_date, :end_date)
.map(&:compact).reject(&:empty?) # I have events with null start_date and end_date
.map{ |start_date, end_date|
(start_date.to_date..end_date.to_date).map(&:to_s)
}
.flatten
但我認爲這是醜陋的,有沒有一種優雅的方式來解決我的問題?也許與postgresql,但我是新的postgresql。
您的代碼會更好看,如果你只是重組它繞在一個範圍和實例方法,因此您可以:Event.has_start_and_end.dates_in_range.flatten –