Ruby on rails类被误认为是Constant

时间:2016-04-10 13:41:26

标签: ruby-on-rails ruby

首先,我是第一次尝试使用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时会显示。

有谁知道造成这种情况的原因是什么?

1 个答案:

答案 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}"}