我能够从邮件发送.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来创建活动
答案 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