2011-12-01 63 views
1

我正尝试使用gem“gcal4ruby”,“0.5.4”从google calender中获取日历细节,然后在rails视图页面中显示这些信息。我正在关注(http://blog.pebbleit.com/post/540819239/fetching-and-caching-google-calendar-data-in-rails)George Ornbo的帖子。在rails视图中显示谷歌日历事件

class CalendarController < ApplicationController 
service = GCal4Ruby::Service.new 

service.authenticate("USERNAME", "PASSWORD") 
cal = GCal4Ruby::Calendar.find(
    service, 
    'YOUR_CALENDAR', 
    {:scope => :first} 
) 
events = GCal4Ruby::Event.find(
    cal, 
    "", 
    { 
    :range => {:start => Time.parse("08/04/2000"), 
    :end => Time.parse("09/04/2010")} 
    } 
) 
end 

我替换了用户名,密码,服务,开始时间和结束时间。当执行此我收到以下错误

undefined method `calendars' for []:Array 
app/controllers/calendar_controller.rb:12:in `event_display' 

任何人都可以帮助我

回答

3

你张贴在GCal4Ruby的早期版本(0.3.X)工作的代码,如果我没有记错。你可能有一个更新的版本的宝石,你会得到这个错误。有些东西已经改变了宝石...我会尝试通过一些(希望这会解决你的错误)。

首先,GCal4Ruby现在在后台使用gdata gem,所以查询调用已经改变了一些。这会影响上面的代码。

其次,因此,Calendar.find不再使用:scope,所以您的find方法返回一个日历数组(而不是一个Calendar对象)。该方法的定义是...

def self.find(service, query, args = {}) 
    … 
end 

...其中query可以是与:id => <id>(返回日历对象)或字符串的哈希 - 与您的日历的名称,这是您所使用的选项。这将返回一个Array,所以要获得第一个结果,而不是{:scope => :first},现在只需获取数组的.first元素。您的代码现在是:

cal = GCal4Ruby::Calendar.find(service, 'YOUR_CALENDAR',{}).first 

此外,取回事件在那里被打破。有几种获取日历事件的方法。在获得您的日历之后,您会调用cal.events,但那会获取所有事件。如果要按日期范围或最大结果过滤,则需要查询Event类并将日历ID作为参数传递。 Event.find与Calendar.find具有完全相同的定义,其工作方式几乎完全相同(通过id或查询参数进行搜索)。你可以阅读source code for event.rb,看看它是如何工作的,它也有很好的文档。

一旦你从上面有你的CAL对象,你可以得到它就像事件:

events = GCal4Ruby::Event.find(service, "", { 
    :calendar => cal.id, 'start-min' => Time.parse("08/04/2000").utc.xmlschema, 
    'start-max' => Time.parse("06/01/2010").utc.xmlschema 
}) 

注意两个“开始分钟”和“start-max是”不是符号,但字符串,那日期作为xmlschema传递。从event.rb评论:

ARGS ::包含可选的附加查询paramters使用哈希值。通过将日历标识传递为{:calendar => calendar.id},将搜索限制为单个日历。有关可能值的完整列表,请参阅herehere

其他参数如:max_results也已更改为“max-results”。链接到api文档列出了所有可能的参数。希望有所帮助。

+0

谢谢!为我工作 – vinothini