我正在尝试建立一个红宝石约会预订系统,并且遇到麻烦了。
我有一堆代码,这些代码将使用从Outlook日历api收集的数据推送到两个数组。
@result['value'].each_with_index do |person, idx|
tmem = TeamMember.find_by_email(person['scheduleId']).postcode
if tmem.present?
postc = {
id: idx,
traveltime: Google::Maps.route(tmem, params[:location]).duration.value
}
else
postc = {
id: idx,
traveltime: Google::Maps.route('N11 1GN', params[:location]).duration.value
}
end
@postcodes.push(postc)
person['scheduleItems'].each do |sch|
(sch['start']['dateTime'].to_datetime.localtime.to_i..sch['end']['dateTime'].to_datetime.localtime.to_i).step(600) do |hour|
person = {
id: idx,
hourbusy: hour,
location: sch['location']
}
@timetable.push(person)
end
end
end
这里是我当前必须显示日历的html代码:(不好意思)
<% params[:length].to_i.times do |times|%>
<!-- search params -->
<%(params[:starttime].to_datetime.change({hour: 8, minute: 0}).to_i..params[:starttime].to_datetime.change({hour: 15, minute: 0}).to_i).step(params[:intervals].to_i * 60) do |hour|%>
<% if @timetable.select {|v| v[:id] == idx}.any? {|h| h[:hourbusy].between? ((Time.at(hour).to_datetime + times.days).to_i - @postcodes.select {|v| v[:id] == idx}[0][:traveltime]), ((Time.at(hour).to_datetime + times.days).to_i + @postcodes.select {|v| v[:id] == idx}[0][:traveltime] + (params[:eventlength].to_i * 60))} %>
<% else %>
<div class="col-md-2">
<div class="card calcard">
<div class="card-body">
<% @alon.push(hour) %>
<p><%= (Time.at(hour).to_datetime.localtime + times.days).strftime('%a %d %B %Y at %H: %M') %></p>
<% if @postcodes %>
<p><%=Time.at(@postcodes.select {|v| v[:id] == idx}[0][:traveltime]).utc.strftime("Travel Time %H:%M")%></p>
<% end %>
</div>
</div>
</div>
<% end %>
<% if @timetable.select {|v| v[:id] == idx}.any? {|h| h[:hourbusy].between? ((Time.at(hour).to_datetime + times.days).to_i), ((Time.at(hour).to_datetime + times.days).to_i + (params[:eventlength].to_i * 60))} %>
<% else %>
<% if @alon.include? hour %>
<% else %>
<div class="col-md-2">
<div class="card calcard2">
<div class="card-body">
<p><%= (Time.at(hour).to_datetime.localtime + times.days).strftime('%a %d %B %Y at %H: %M') %></p>
<% if @timetable.bsearch {|v| v[:hourbusy] >= hour}.present? %>
<% if @timetable.bsearch {|v| v[:hourbusy] >= hour}[:location].present? %>
<p><%=Time.at(Google::Maps.route(@timetable.bsearch {|v| v[:hourbusy] >= hour}[:location], params[:location]).duration.value).utc.strftime("Travel Time %H:%M")%></p>
<% end %>
<% else %>
<% if @timetable.bsearch {|v| v[:hourbusy] <= hour}[:location].present? %>
<p><%=Time.at(Google::Maps.route(@timetable.bsearch {|v| v[:hourbusy] <= hour}[:location], params[:location]).duration.value).utc.strftime("Travel Time %H:%M")%></p>
<% end %>
<% end %>
</div>
</div>
</div>
<% end %>
<% end %>
<% end %>
<% end %>
我期望发生的事情是当时不忙的团队成员(包括旅行时间)所显示的时隙。
用户输入事件的开始时间,位置,以分钟为单位的事件长度以及搜索间隔。
然后应该让用户看到团队成员可以进行此新预订的所有时间的列表,包括旅行所需的时间。考虑到行程时间,当前代码似乎无法很好地工作。
它不起作用的例子是:
用户有一个半小时2的事件(所以以3结束),旅行时间返回为3个小时,但是代码指出该用户可以在4时做一个事件(因此似乎没有参加)旅行时间?)
这段代码是一团糟,我不知道是否有任何宝石红宝石或其他可以帮助我以不同方式成功实现的东西。
任何帮助或建议都很好!