2016-10-05 41 views
2

我使用拖放區作爲窗體的一部分。即。該表單除了dropzone字段之外還有其他元素。此外,沒有新的視圖加載表單提交後,只是一些js代碼如此remote = true。該形式如下:dropzone在窗體中 - InvalidAuthenticityToken

<%= form_tag submit_form_path, method: "POST", "data-abide" => "", 'autocomplete' => 'off', id: "id-of-form", remote: true, multipart: true do %> 

<div class="dropzone" id="myDropzone"></div> 
<%= text_field_tag "name",  .... 
<%= text_field_tag "number", "", .... 
<%= text_field_tag "email", "", .... 
<%= submit_tag "submit", id: "submit-button" .... 

<% end %> 

JS

​​

}

在提交表單我得到Can't verify CSRF token authenticity Completed 422 Unprocessable Entity in 2ms ActionController::InvalidAuthenticityToken

UPDATE: 解決無效的真實性令牌問題。但是,現在我得到一個ActionView::MissingTemplate - Missing template錯誤。 將dropzone添加到表單之前。我成功地能夠提交表單並執行一些js代碼(submit_details.js.erb)而無需重新加載頁面。

,但現在它

Processing by XyzController#submit_details as JSON 

ActionView::MissingTemplate - Missing template xyz/submit_details, application/submit_enquiry with {:locale=>[:en], :formats=>[:json], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :arb, :jbuilder]}. 

控制器:

我評論的一切,而且功能也只是

def submit_enquiry 
    #commented stuff 
    puts "checking " 
    respond_to do |format|   
    format.html  
    format.js 
    format.json { render :json => true } 
    end 
end 

日誌是:

開始POST 「/ submit_form」 爲127.0.0.1,在2016年10月5日14時28分00秒+0800

14時28分00秒web.1 |通過XyzController#submit_details處理爲JSON

14:28:00 web.1 |參數:{「firstname」=>「something」,「lastname」=>「something」,「file」=> {「0」=>#,@ original_filename =「filename.png」,@ content_type =「image/png 「,@ headers =」Content-Disposition:form-data; name = \「file [0] \」; filename = \「filename.png \」\ r \ nContent-Type:image/png \ r \ n「> },「language」=>「en」}

14:28:00 web.1 |檢查

14:28:00 web.1 |已完成406在2毫秒內不可接受 14:28:00 web.1 | 14:28:00 web.1 | ActionController的:: UnknownFormat - 的ActionController :: UnknownFormat:

回答

4

嘗試添加標題到您的懸浮窗的要求

Dropzone.options.myDropzone = { 
    url: '/submit_form', 
    autoProcessQueue: false, 
    ... 
    headers: { 
    'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') 
    } 
} 
+0

這解決了無效的真實性令牌問題。謝謝。請參閱更新。 – smanvi12

+0

@ sakshik12這個答案可能有幫助http://stackoverflow.com/a/32915600/5306391 –

+0

我檢查了鏈接,但我無法一起迴應js和json。我在我的控制器中有 - 「respond_to do | format |」 format.html format.js format.json {render:json => true} end' ...我可以在日誌中看到請求,但在此之後它不做任何事情。 – smanvi12

0

得到了解決:

在僅使用JSON控制器響應。

你想要執行的所有js代碼放在Dropzone中。選項:

this.on("success", function(file, responseText) { 
    #js code 
}); 
0

我希望我所有的Dropzones能夠使用我的設置(Rails 5,CSRF令牌等)。所以,我想出了一個oneliner $ ->後放入的CoffeeScript:

Dropzone.prototype.defaultOptions['headers'] = 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') 
相關問題