直接打开.ics文件事件没有邮件附件
问题描述:
我能够从邮件发送.ics文件附件,并且能够从邮件创建一个事件,但我想直接点击link_to创建一个事件,它应该要求进行身份验证谷歌,前景等...从那里它应该创建一个事件日历,用户被选中。 这里是我的代码直接打开.ics文件事件没有邮件附件
在模型
def to_ics(e)
event = Icalendar::Event.new
event.dtstart = Icalendar::Values::DateTime.new(e.start_time, tzid: e.start_time_zone)
event.dtend = Icalendar::Values::DateTime.new(e.end_time, tzid: e.start_time_zone)
event.description = e.description
event.created = self.created_at
event.last_modified = self.updated_at
event.summary = e.event_name
event.url = e.registration_link
event.location = e.city + "," + e.state
event.uid = event.url = "#{self.id}"
event
end
,并在我的控制器的显示方法
def show
@event = AssocEvent.find(params[:id])
calendar = Icalendar::Calendar.new
calendar.add_event(@event.to_ics(@event))
calendar.publish
ics_file = File.open('../Descargas/basic.ics')
render :text => calendar.to_ical
end
这里是我的看法文件
<%= link_to "ADD TO MY CALENDAR", event_path(:id => e.id), class: "calender_events" %>
我使用iCalender事件的宝石,其非常受欢迎创建活动
答
你可以使用google-api-client和omniauth-google-oauth2宝石来实现这个功能。 首次使用Google进行身份验证时,请记得在access_token过期时,保存refresh_token刷新access_token。 用谷歌认证后,你可以直接添加一个事件到日历。
def add_to_google_calendar
if user.access_token.present? && user.refresh_token.present? && user.gmail.present?)
user.refresh_access_token
client = Google::APIClient.new
client.authorization.access_token = user.access_token
service = client.discovered_api('calendar', 'v3')
event = {
'id' => self.created_on.to_i,
'summary' => "summary",
'location' => "location",
'start' => {
'dateTime' => "startdate",
'end' => {
'dateTime' => "enddate"
}
}
results = client.execute!(
:api_method => service.events.insert,
:parameters => {
:calendarId => 'primary'},
:body_object => event)
end
rescue
// error handling
end
end