直接打开.ics文件事件,无需邮件附件

时间:2016-05-14 03:25:04

标签: ruby-on-rails ruby ruby-on-rails-4 google-calendar-api icalendar

我能够从邮件发送.ics文件附件,并且能够通过邮件创建活动但我想直接在点击link_to上创建活动,它应该要求进行身份验证,如google,outlook等...和从那里它应该创建一个事件来压缩用户被选中。 这是我的代码

在模型中

 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

并在我的控制器中显示show方法

 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 gem来创建活动

1 个答案:

答案 0 :(得分:0)

您可以使用 google-api-client omniauth-google-oauth2 宝石来实现此功能。 在第一次使用Google进行身份验证时,请记得在 access_token 过期后保存 refresh_token 以刷新 access_token 。 在使用Google进行身份验证后,您可以直接向日历添加活动。

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