我正在开发一个简单的基于rails的volunteer management system。我想使用Google日历来呈现计划信息。为此,我使用icalendar gem从轮班列表中生成日历:
def generate_ical
cal = Icalendar::Calendar.new
@shifts.each do |shift|
event = Icalendar::Event.new
event.start = shift.start.strftime("%Y%m%dT%H%M%S")
event.end = shift.end.strftime("%Y%m%dT%H%M%S")
event.summary = shift.task.name if shift.task
event.uid = shift_url(shift)
cal.add event
end
cal.to_ical
end
这个generates an output是这样的:
BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
PRODID:iCalendar-Ruby
BEGIN:VEVENT
DTEND:20131122T230000
DTSTAMP:20131125T003944
DTSTART:20131122T220000
SEQUENCE:0
SUMMARY:Server
UID:http://vols.herokuapp.com/shifts/980190962
END:VEVENT
END:VCALENDAR
当我使用that output作为Google日历的导入时,它不会显示任何事件。它会针对validator进行正确检查。
如果我在Google日历中创建一个包含测试事件的日历,那么它的ical就是:
BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:Test Calendar
X-WR-TIMEZONE:America/New_York
X-WR-CALDESC:
BEGIN:VFREEBUSY
DTSTART:20131122T150000Z
DTEND:20131122T160000Z
DTSTAMP:20131124T221822Z
UID:524da491ab22d035230d4c46e3b3334ed79d7c35@google.com
ATTENDEE;X-NUM-GUESTS=0:mailto:dhappy.org_22edpsb9hrffs8qh857qsnngfo@group.calendar.google.com
SUMMARY:Busy
END:VFREEBUSY
END:VCALENDAR
它使用不同的块名称:VFREEBUSY而不是VEVENT。我在谷歌日历中找到了VEVENTs的在线参考,所以这可能不是问题。有没有人有把这个宝石连接到Google日历的经验,谁可以指出我需要改变的东西?
答案 0 :(得分:0)
您的问题在于Google日历上的导出设置。转到要导出的日历的日历设置。在页面上的“日历地址”部分下,单击“更改共享设置”。现在取消标记为“仅共享我的忙/闲信息(隐藏详细信息)”的框。
答案 1 :(得分:0)
您需要确保设置正确的标题:
def index
respond_to do |format|
format.ics do
headers['Content-Type'] = "text/calendar; charset=UTF-8" # Google Calendar likes this!
render :text => @cal.to_ical
end
end
end
来源:https://stackoverflow.com/a/493379
编辑:
这对我来说暂时起作用,所以必须有另一个因素。