首先,我是第一次尝试使用Ruby on Rails。 我正在设计一个表单以接收事件信息并将这些事件保存在Google日历中。 要使用以下gem保存Google日历上的活动:http://googlecalendar.rubyforge.org/
我有以下视图代码。
<h1>Welcome to Ruby On Rails Calendar</h1>
<h3>Add Event</h3>
<form action="/google_calendar/create" method="post">
<table>
<tr>
<td>Title</td><td><input type="text" /></td>
</tr>
<tr>
<td>Begin Date</td><td><input type="date" name="begindate" id="bagindate" /><input type="time" name="beginhour" id="beginhour" /></td>
</tr>
<tr>
<td>End Date</td><td><input type="date" name="enddate" id="enddate" /><input type="time" name="endhour" id="endhour" /></td>
</tr>
<tr>
<td>Local</td><td><input type="text" name="local" id="local" /></td>
</tr>
<tr>
<td>Description</td><td><input type="textarea" rows="10" name="description" id="description" /></td>
</tr>
<tr>
<td><input type="Submit" value="Save" /></td>
</tr>
</table>
</form>
<%= @result_message %>
对于控制器我有这个代码(主要来自我以前分享的宝石网站)。
class GoogleCalendarController < ApplicationController
def create
send_event(params[:title],params[:begindate] + " " + params[:beginhour], params[:enddate] + " " + params[:endhour], params[:local], params[:description])
@result_message = 'Event sent successfully'
render :welcome => index
end
private def send_event(title, begin_datetime, end_datetime, local, description)
require 'googlecalendar'
google_calendar_service = GData.new
google_calendar_service.login(Rails.configuration.google_calendar_email, Rails.configuration.google_calendar_password)
event = { :title => title,
:content => description,
:where => local,
:startTime => begin_datetime,
:endTime => end_datetime}
google_calendar_service.new_event(event)
end
end
问题是,当我尝试保存事件时,我收到以下错误。
uninitialized constant GoogleCalendarController::GData
据说GData是googlecalendar gem中定义的类,但似乎没有被识别出来。
我的Gemfile上有gem 'googlecalendar'
,bundle install
,我bundle show googlecalendar
时会显示。
有谁知道造成这种情况的原因是什么?
答案 0 :(得分:3)
文档有点不对
试试这个
require 'googlecalendar'
google_calendar_service = Googlecalendar::GData.new
由于你没有指定命名空间,所以首先Ruby在::
全局命名空间中搜索它并且没有找到,所以期望它是GoogleCalendarController::GData
来自gem lib/googlecalendar.rb
的代码,您可以看到命名空间为Googlecalendar
$:.unshift(File.dirname(__FILE__)) unless
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
module Googlecalendar
# List of lib files to include
FILES = %w{calendar.rb dsl.rb event.rb gcalendar.rb gdata.rb ical.rb net.rb version.rb}
end
# Add all FILES as require
Googlecalendar::FILES.each { |f| require "googlecalendar/#{f}"}