我正在创建一个具有以下类的Web应用程序。 User
和Booking
。我需要使清洁用户能够批准预订,这又将在主机日历上创建一个事件。
用户具有两种类型,cleaners
和hosts
。每个用户都有一个日历。
我有两个很难满足的用例。
Booking
的请求;发生这种情况时,Booking
状态将更改为已批准,并且会将事件添加到主机日历中。此步骤之所以有效,是因为current_user
是host
,它是由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
TLDR;
如何使用Google :: Api :: CalendarV3将事件从一个用户日历添加到另一个用户日历?
解决我的问题的方法是在新事件的参数中添加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