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]}" }}