【发布时间】:2010-01-27 13:13:34
【问题描述】:
鉴于以下模型:
class Room < ActiveRecord::Base
has_many :contracts
end
class Contracts < ActiveRecord::Base
# columns
# start_date Date
# end_date Date
belongs_to :room
end
一个房间的合同不重叠。我的问题是,我如何能够找到合同之间的差距。一个例子:
room = Room.create
c1 = room.contracts.create(:start_date => Date.today, :end_date => 1.month.since)
c2 = room.contracts.create(:start_date => 2.months.since, :end_date => 4.months.since)
rooms = Room.with_contract_gaps #rooms == [room]
奖励回合将是搜索具有特定日期范围的间隙的可能性,或者甚至更好地以哈希或数组的形式获取所有间隙作为日期范围。
gaps = Room.contract_gaps
gaps # {1 => [((1month.since+1.day)..(2.months.since-1.day))]}
我已经通过谷歌搜索并找到了Inverting Date Ranges。但老实说,我真的不知道如何在这种特定情况下使用它。
如果有人有解决方案或一些有用的提示来解决这个问题,那就太好了。
【问题讨论】:
标签: mysql ruby-on-rails activerecord