我正在使用remote: true
選項構建一個非常簡單的單頁Rails應用程序,其中包含一個表單。基本上,該用途會在表單上選擇幾個選項,並使用create.js.erb
視圖將一組符合這些要求的產品呈現回頁面。到現在爲止還挺好。我可以使用`remote:true`在Rails表單上下載CSV文件嗎?
我還想讓用戶選擇下載產品的CSV列表。問題是,使用remote: true
選項,我無法弄清楚如何實際觸發下載。我可以使用黑客here路由到正確的格式和行動:
<%= button_tag('Download CSV', :value => 'csv', :name => 'format') %>
def create
respond_to do |format|
format.js
format.csv { send_data @products.to_csv }
end
end
這幾乎工程;當我單擊「下載CSV」按鈕時,瀏覽器響應中會返回正確的CSV(文本)數據 - 但它不會呈現或觸發文件下載,可能是因爲它是在AJAX響應中返回的。
我可以通過一個鏈接,而不是提交表單,使這項工作(假設行動響應「GET」):
<%= link_to 'Download CSV', products_path(format: :csv) %>
但是當時我沒有獲得有關用戶數據在窗體參數中捕獲產品需求。
有什麼辦法可以做到這一點嗎?或者我需要失去remote: true
並通過HTML(非AJAX)提交表單來觸發CSV下載?
你有沒有想過呢? –
不,我正在使用'value:'csv',name:'format'' hack(在控制器中使用'send_data')。它工作得不錯,但仍然有味道。 – Sasgorilla
我最終在呈現的'js.erb'部分中追加'Download CSV'作爲'button_to'。 –