So, I have an Event
model that has a starts_at
and a ends_at
column and I want to find events that take place in a range of dates.
I guess an event overlaps if it begins before the range ends and ends after the range begins. :)
So:
{:conditions => ['? < ends_at AND ? > starts_at', range.first, range.last]}
There are four cases:
Start End
1. |-----|
2. |------|
3. |-------------|
4. |------|
Your named_scope only gets cases 1,2 and 4. So you just need need to add:
named_scope :in_range, lambda { |range|
{:conditions => [
'(starts_at BETWEEN ? AND ? OR ends_at BETWEEN ? AND ?) OR (starts_at <= ? AND ends_at >= ?)',
range.first, range.last, range.first, range.last, range.first, range.last
]}
}