在rails

时间:2017-06-12 11:02:24

标签: ruby-on-rails ruby rubygems ruby-on-rails-5.1 ice-cube

我想创建一个Api,它获取start_time和end_time以及应该分割开始时间和结束时间的月份数,并返回一个我可以循环遍历的集合并将数据保存到数据库中。 例如,每周星期日从14:05到18:30。 这就是我所做的一切:

def create_recurring_schedules       号= 0       如果经常性的话         schedule = Schedule.new(start_time,end_time:end_time)

    schedule.add_recurrence_rule Rule.weekly

     if month == 12

        dates = schedule.occurrences_between(start_time,  start_time + 1.year) 
     elsif month == 3
        logger.info "################### The 3 month is #{self.s_month} #############################################"
        dates = schedule.occurrences_between(start_time, start_time + 3.month)
     elsif month == 6
        logger.info "################### The 6 month is #{month} ###########################################"
        dates = schedule.occurrences_between(start_time, start_time + 6.month)
     elsif month == 1

     dates = schedule.occurrences_between(start_time , start_time + 1.months)
   end
    dates.each do |date|
      number +=1
      logger.info "################### Start number #{number} #############################################"
      ClinicSchedule.create(user_id: user_id, clinic_id: clinic_id, month: month,
                                  start_time: date.start_time.strftime("%Y-%m-%d %H:%M"),
                                  end_time: date.end_time.strftime("%Y-%m-%d %H:%M"),
                                  date: date.strftime("%Y-%m-%d"), recurring: true,
                                  recurrence_id: recurrence_id)
      logger.info "################### Recurrence ID: "
      logger.info recurrence_id
      logger.info "################### End Recurrence ID ###########################################################"
    end
  end
end

我遇到的问题就是这个案子:

dates = schedule.occurrences_between(start_time , start_time + 1.months)

当我从四个月后设置start_time时,例如2017-10-13 16:20。它仅提供35周,并且从四个月后开始不给53周。

1 个答案:

答案 0 :(得分:0)

您的问题来自s_time=(Time.now+start_time).to_i。似乎start_timeActiveSupport::TimeWithZone的一个实例。您正试图添加可能不是您想要实现的TimeActiveSupport::TimeWithZone

schedule.occurrences_between至少需要两个ActiveSupport::TimeWithZone个实例。因此,您可以这样做:

s_time = Time.zone.now
e_time = s_time + 1.month

schedule.occurrences_between(s_time, e_time)

UPD:实际上,你不需要那么长的条件数月:

schedule.occurrences_between(start_time, start_time + month.months)

而不是定义和增加number使用#each_with_index