我想在这里一次完成几件事。我开始使用params [:available_times],它们是总时间跨度(比如说上午9点 - 下午4点,下午6点 - 晚上10点),它们被切入时隙(长度由service_length决定)。我想循环遍历时隙,并使用我的连接表,会话交叉引用它们,如果采用该时隙,则返回0,否则返回1,这是我到目前为止:
def available_times
service_length = params[:service_length].to_i
user = User.find(params[:id])
timespans = []
params[:available_times].each do |time|
start_time = time.last[:availability_start].to_datetime
end_time = time.last[:availability_end].to_datetime
begin
if user.sessions.where("start_time <= :session_end AND end_time >= :session_start",{session_start: start_time, session_end: start_time + service_length.minutes}).present?
timespans << {time: start_time.to_datetime, available: 0}
else
timespans << {time: start_time.to_datetime, available: 1}
end
end while (start_time += service_length.minutes) < end_time
end
render json: timespans.to_json
end
所以,假设我的用户已经有一个会话,持续时间从上午10点到11点,我的结果应该是:
[{time:9am, available:1}, {time:10am, available:0}, {time:11am, available:1}... and so on]
我在我的表中创建了几个重叠的会话,但它仍然给了我所有的1。
提前致谢
答案 0 :(得分:0)
如果在运行时查看日志,请记下正在运行的sql。它看起来是否正确?另外,尝试手动运行相关的sql,看看它是否返回了您的期望。