获取时间重叠并创建一系列哈希

时间:2015-01-30 21:45:56

标签: ruby-on-rails ruby

我想在这里一次完成几件事。我开始使用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。

提前致谢

1 个答案:

答案 0 :(得分:0)

如果在运行时查看日志,请记下正在运行的sql。它看起来是否正确?另外,尝试手动运行相关的sql,看看它是否返回了您的期望。