2013-11-25 18 views
0

有一個簡單的Rails應用程序窗體視圖。用戶通過「文件選擇器功能」(例如Google Picker)從他的API帳戶(例如Google Drive賬戶)中選擇一個文件,並且API通過JavaScript回調函數發送數據(url,縮略圖...)(見下面的JS代碼)。如何將Google Drive API中的數據傳遞到Rails應用程序模型?

如何通過JavaScript回調函數將來自API的數據傳遞到Rails模型?

代碼看起來像是如何在Rails _form文件中結束?控制器會發生什麼?

對不起,我是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> 

一個例子的Rails模型:

create_table "postfiles", :force => true do |t| 
    t.text  "gdrive" 
    t.integer "post_id" 
    end 

再次,由於很多關於讀數。任何想法真的很感激!

回答

0

這是我找到了解決辦法:

設置一個hidden_​​field在_form視圖:

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

並從JavaScript回調函數將數據傳遞到經由.setAttribute的hidden_​​field。

這裏是被編輯的JavaScript部分從上方:

// 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); 
    } 

最後一行以上發送API數據(此處爲:URL = DOC [google.picker.Document.URL])連接到軌道模型。

0

你想要保存什麼,當然你可以在url中傳遞值,但你也可以使用某種隱藏的字段,然後在窗體中發送它。

+0

爲了簡單起見,我們假設我只想保存通過API傳遞的URL --- url = doc [google.picker.Document.URL]; ---並將其保存在Rails模型「gdrive」中。 – YvonC

相關問題