使用Google :: Api :: V3将事件添加到另一个用户的日历中

问题描述 投票:0回答:1

我正在创建一个具有以下类的Web应用程序。 UserBooking。我需要使清洁用户能够批准预订,这又将在主机日历上创建一个事件。

用户具有两种类型,cleanershosts。每个用户都有一个日历。

我有两个很难满足的用例。

  1. 主机接受清洁员Booking的请求;发生这种情况时,Booking状态将更改为已批准,并且会将事件添加到主机日历中。此步骤之所以有效,是因为current_userhost,它是由oauth授权对其日历进行更改的。
def new_event(start, endd, cleaner)
    client = Signet::OAuth2::Client.new(client_options)
    client.update!(session[:authorization])
    service = Google::Apis::CalendarV3::CalendarService.new
    service.authorization = client
    calendar = service.get_calendar(:primary)
    today = Date.today
    event = Google::Apis::CalendarV3::Event.new({
      start: Google::Apis::CalendarV3::EventDateTime.new(date: start),
      end: Google::Apis::CalendarV3::EventDateTime.new(date: endd),
      summary: "Cleaning Scheduled by #{cleaner}"
    })
    service.insert_event(calendar.id, event)
  end

我在这里称该方法

def approve
    @booking = Booking.find(params[:id])
    @booking.update(status:'approved')
      if @booking.save
        flash[:success] = "Reservation Approved"
        # send_approved_booking_notification(@booking)
        new_event(@booking.starts_at.to_date,@booking.starts_at.to_date, @booking.cleaner.name)
        redirect_to dashboard_path
      else
  1. 房东要求清洁工,清洁工批准预订,当清洁员批准后,应将事件发布到主持人日历;当前,该事件仅添加到当前授权用户日历,这是此中的清洁工日历案件。如何将该事件发布到用户的日历上创建了请求(主机)?

TLDR;

如何使用Google :: Api :: CalendarV3将事件从一个用户日历添加到另一个用户日历?

ruby-on-rails oauth calendar google-calendar-api
1个回答
0
投票

解决我的问题的方法是在新事件的参数中添加attendee。在这种情况下,我指定了host的电子邮件,并且该事件已添加到清洁器日历和主持人的日历中。这是我的new_event方法,可将事件插入两个日历中

def new_event(start, endd, cleaner, host)
    client = Signet::OAuth2::Client.new(client_options)
    client.update!(session[:authorization])
    service = Google::Apis::CalendarV3::CalendarService.new
    service.authorization = client
    calendar = service.get_calendar(:primary)
    today = Date.today
    event = Google::Apis::CalendarV3::Event.new({
      start: Google::Apis::CalendarV3::EventDateTime.new(date: start),
      end: Google::Apis::CalendarV3::EventDateTime.new(date: endd),
      attendees: [{email: host.email}],
      summary: "Cleaning Scheduled by #{cleaner}"
    })
    service.insert_event(calendar.id, event)
end
© www.soinside.com 2019 - 2024. All rights reserved.