Ruby on rails Rails 4:创建Google日历事件

Ruby on rails Rails 4:创建Google日历事件,ruby-on-rails,google-calendar-api,google-api-client,google-api-ruby-client,Ruby On Rails,Google Calendar Api,Google Api Client,Google Api Ruby Client,我正在尝试插入谷歌日历事件,如图所示。如果我发送带有硬编码值的请求,如示例所示,它可以正常工作: event = {'summary' => 'Summary', 'location' => 'Location', 'start' => { 'dateTime' => '2011-06-03T10:00:00.000-07:00' }, 'end' => { 'dateTime' => '2011-06-0

我正在尝试插入谷歌日历事件,如图所示。如果我发送带有硬编码值的请求,如示例所示,它可以正常工作:

event = {'summary' => 'Summary',
         'location' => 'Location',
         'start' => { 'dateTime' => '2011-06-03T10:00:00.000-07:00' },
         'end' => { 'dateTime' => '2011-06-03T10:25:00.000-07:00' }}
但如果我尝试发送变量,它会自动失败:

event = {'summary' => "#{params[:summary]}",
         'location' => "#{params[:location]}",
         'start' => { 'dateTime' => "#{params[:start_time]}" },
         'end' => { 'dateTime' => "#{params[:start_time]}" }}
如果我以这种方式格式化,它也会失败:

event = "{
          \"summary\": \"#{params[:summary]}\",
          \"location\": \"#{params[:location]}\",
          \"start\": { \"dateTime\": \"#{params[:start_time]}\" },
          \"end\": { \"dateTime\": \"#{params[:end_time]}\" }
        }"
我可以用格式如下的
start\u time
end\u time
成功发布它:
Date.today.strftime(%Y-%m-%dT%l:%m:%S.000-07:00”)
,但这并不理想,因为我相信
start\u time
end\u time
参数已经是
time
对象

表单正在传递参数,因为我在Rails控制台中得到了这些参数(
authenticity\u token
为简洁起见省略):

以下是相关代码:

client = Google::APIClient.new({:application_name => "PlannerApp",
                                :application_version => "1.0"})
client.authorization.access_token = t.fresh_token
service = client.discovered_api('calendar', 'v3')
client.execute(:api_method => service.events.insert,
               :parameters => {'calendarId' => 'primary'},
               :body => JSON.dump(event),
               :headers => {'Content-Type' => 'application/json'})
以下是我从谷歌获得的信息(
Authorization
为简洁起见省略):

我应该如何格式化这些
事件
哈希值以获得成功的
POST

解决方案:

event = {'summary' => "#{params[:event][:summary]}",
         'location' => "#{params[:event][:location]}",
         'start' => { 'dateTime' => Time.new(params['event']['start_time(1i)'],
                                             params['event']['start_time(2i)'],
                                             params['event']['start_time(3i)'],
                                             params['event']['start_time(4i)'],
                                             params['event']['start_time(5i)'])
                                        .to_datetime.rfc3339,
                      'timeZone' => "America/Denver" },
         'end' => { 'dateTime' => Time.new(params['event']['end_time(1i)'],
                                           params['event']['end_time(2i)'],
                                           params['event']['end_time(3i)'],
                                           params['event']['end_time(4i)'],
                                           params['event']['end_time(5i)'])
                                      .to_datetime.rfc3339,
                    'timeZone' => "America/Denver" }}

您的参数是嵌套的。因此,这将是:

event = {'summary' => "#{params[:event][:summary]}",
     'location' => "#{params[:event][:location]}",
     'start' => { 'dateTime' => "#{params[:event][:start_time]}" },
     'end' => { 'dateTime' => "#{params[:event][:start_time]}" }}

接得好-谢谢!这解决了我关于字符串的部分问题(
summary
location
),但没有解决《泰晤士报》(
start\u time
end\u time
)的问题。你对这些有什么想法吗?它们是数据库和表单中的时间字段
“#{params[:event][:start_time]}”
不起作用,但是根据引用,
dateTime
应该接收一个
dateTime
值。我还尝试在
开始
结束
散列中添加
'timeZone'=>“America/Denver”
,但这也不起作用。根据您返回的参数,您必须建立它们。Grrr…抱歉,提交得太早。看看你是怎么把你的约会搞砸的?i、 e.
“开始时间(1i)”=>“2015”,“开始时间(2i)”=>“4”,“你的月份”开始时间(3i)”=>“15”,“开始时间(4i)”=>“14”,“你的一天”开始时间(5i)”=>“54”,“结束时间(1i)”=>“2015”#您的年份
因此,要获得年份,您可以使用
“#{params[:event][:start_time(1i)]}”
此外,无论何时,只要您让它工作,您可以标记这个答案和正确的解决方案吗?谢谢明亮的那是票。非常感谢。我会接受这一点,并用你的解决方案更新我的问题。
event = {'summary' => "#{params[:event][:summary]}",
         'location' => "#{params[:event][:location]}",
         'start' => { 'dateTime' => Time.new(params['event']['start_time(1i)'],
                                             params['event']['start_time(2i)'],
                                             params['event']['start_time(3i)'],
                                             params['event']['start_time(4i)'],
                                             params['event']['start_time(5i)'])
                                        .to_datetime.rfc3339,
                      'timeZone' => "America/Denver" },
         'end' => { 'dateTime' => Time.new(params['event']['end_time(1i)'],
                                           params['event']['end_time(2i)'],
                                           params['event']['end_time(3i)'],
                                           params['event']['end_time(4i)'],
                                           params['event']['end_time(5i)'])
                                      .to_datetime.rfc3339,
                    'timeZone' => "America/Denver" }}
event = {'summary' => "#{params[:event][:summary]}",
     'location' => "#{params[:event][:location]}",
     'start' => { 'dateTime' => "#{params[:event][:start_time]}" },
     'end' => { 'dateTime' => "#{params[:event][:start_time]}" }}