Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将数据从GoogleDriveAPI传递到Rails应用程序模型?_Ruby On Rails_Ruby On Rails 3_Callback_Google Drive Api - Fatal编程技术网

Ruby on rails 如何将数据从GoogleDriveAPI传递到Rails应用程序模型?

Ruby on rails 如何将数据从GoogleDriveAPI传递到Rails应用程序模型?,ruby-on-rails,ruby-on-rails-3,callback,google-drive-api,Ruby On Rails,Ruby On Rails 3,Callback,Google Drive Api,有一个简单的Rails应用程序表单视图。用户通过“文件选择器功能”(例如Google Picker)从其API帐户(例如Google Drive帐户)中选择一个文件,API通过javascript回调函数发回数据(url、缩略图等)(参见下面的JS代码) 如何通过javascript回调函数将来自API的此类数据传递到Rails模型中 代码在Rails表单文件中是什么样子的?控制器中发生了什么 对不起,我对Rails还很陌生,这可能是一个新手问题。任何类型的建议,链接,阅读更多关于它的信息等都会

有一个简单的Rails应用程序表单视图。用户通过“文件选择器功能”(例如Google Picker)从其API帐户(例如Google Drive帐户)中选择一个文件,API通过javascript回调函数发回数据(url、缩略图等)(参见下面的JS代码)

如何通过javascript回调函数将来自API的此类数据传递到Rails模型中

代码在Rails表单文件中是什么样子的?控制器中发生了什么

对不起,我对Rails还很陌生,这可能是一个新手问题。任何类型的建议,链接,阅读更多关于它的信息等都会非常有用。我找了好一阵子,但没找到s.th。有用。 非常感谢你的帮助

html/javascript:

<div class="btn btn-primary" id="gdrive" onclick="javascript:openPicker()">
Choose Google Drive File
</div>

<script type="text/javascript">

  // The API developer key obtained from the Google Cloud Console.
  var developerKey = '<DEV KEY>';

  // Use the API Loader script to load google.picker.
  function openPicker() {
    gapi.load('picker', {'callback': createPicker});
  }

  // Create and render a Picker object for searching images.
  function createPicker() {
    var picker = new google.picker.PickerBuilder().
        addView(google.picker.ViewId.DOCS).
        setDeveloperKey(developerKey).
        setCallback(pickerCallback).
        build();
    picker.setVisible(true);
  }

  // A simple callback implementation.
  function pickerCallback(data) {
    var url = 'nothing';
    if (data[google.picker.Response.ACTION] == google.picker.Action.PICKED) {
      var doc = data[google.picker.Response.DOCUMENTS][0];
      url = doc[google.picker.Document.URL];
    }
    var message = 'You picked: ' + url;
    document.getElementById('gdrive').innerHTML = message;
  }
</script>  

<!-- The Google API Loader script. -->
<script type="text/javascript" src="https://apis.google.com/js/api.js?onload=loadPicker"></script>

再次感谢您的阅读。任何想法都非常感谢

您想保存什么当然可以在url中传递值,但也可以使用某种隐藏字段,然后以表单形式发送。

这是我找到的解决方案:

在_表单视图中设置隐藏的_字段:

  <%= f.hidden_field :gdrive,
                     :id => "gdrive"%>

上面的最后一行将API数据(此处:url=doc[google.picker.Document.url])发送到rails模型。

为了简单起见,假设我只保存通过API提供的url--url=doc[google.picker.Document.url];--并将其保存在Rails模型“gdrive”中。
  <%= f.hidden_field :gdrive,
                     :id => "gdrive"%>
 // A simple callback implementation.
  function pickerCallback(data) {
    var url = 'nothing';
    if (data[google.picker.Response.ACTION] == google.picker.Action.PICKED) {
      var doc = data[google.picker.Response.DOCUMENTS][0];
      url = doc[google.picker.Document.URL];
    }
    document.getElementById('gdrive').setAttribute('value', url);
  }