показ событий календаря Google в виде рельсов - PullRequest
1 голос
/ 01 декабря 2011

Я пытаюсь использовать gem "gcal4ruby", "0.5.4", чтобы получить детали календаря из календаря Google, а затем показать эту информацию на странице просмотра рельсов.Я слежу (http://blog.pebbleit.com/post/540819239/fetching-and-caching-google-calendar-data-in-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'

Любой может помочь мне

1 Ответ

3 голосов
/ 02 декабря 2011

Код, который вы разместили, работал в более ранних версиях (0.3.x) GCal4Ruby, если я не ошибаюсь.Возможно, у вас более свежая версия гема, и вы получаете эту ошибку.Некоторые вещи изменились в жемчужине ... Я постараюсь пройти через несколько (надеюсь, это исправит ваши ошибки).

Во-первых, GCal4Ruby теперь использует гем gdata в фоновом режиме, поэтому вызовы запроса немного изменились.Это влияет на приведенный выше код.

Во-вторых, в результате Calendar.find больше не использует :scope, поэтому ваш метод find возвращает массив календарей (вместо одного объекта Calendar).Определение метода:…

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

… где query может быть хэшем с :id => <id> (который возвращает объект календаря) или строкой - с именем календаря, которое вы можете выбратьИспользуешь.Это вернет массив, поэтому для получения первого результата вместо {:scope => :first} вы можете просто получить элемент .first массива.Ваш код теперь будет выглядеть так:

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

Кроме того, выборка событий здесь прервана.Есть несколько способов получения событий календаря.Можно было бы позвонить cal.events после получения вашего календаря, но при этом были бы получены все события.Если вы хотите фильтровать по диапазону дат или максимальным результатам, вам нужно запросить класс Event и передать идентификатор календаря в виде аргумента.Event.find имеет точно такое же определение, что и Calendar.find, и работает практически точно так же (поиск по id или по параметрам запроса).Вы можете прочитать исходный код для 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-min' и 'start-max' не символы, а строкии что даты передаются как xmlschema.Из комментария event.rb:

args :: хеш, содержащий необязательные дополнительные параметры запроса для использования.Ограничьте поиск одним календарем, передав идентификатор календаря как {:calendar => calendar.id}.См. здесь и здесь для получения полного списка возможных значений.

Другие аргументы, такие как :max_results, также изменились на «max-results».Ссылки на api docs содержат список всех возможных аргументов.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...