dropzoneを使い、file送信するように変更しました。https://www.dropzonejs.com/
(本来dropzoneは、ファイル選択後に自動でpostされるライブラリなのですが、autoProcessQueue: falseにして、ボタンクリック後、dz.processQueue()する事で送信されるようにした。)
その結果、アップ後に表示されるはずの画面が表示されなくなりました。
js
1 var dz = new Dropzone("#upload-dropzone", 2 { 3 url: '/user/artilces/insert_preview', 4 paramName:'list_file', 5 dictDefaultMessage: 'クリックorドラッグにてアップロード', 6 autoProcessQueue: false 7 }); 8 9 $("#csvup").on("click", function(){ 10 dz.processQueue(); 11 return false; 12 });
haml
1 %p.detail 選択したファイルをアップロードして、登録する。 2 .upload_area 3 = form_tag user_articles_insert_preview_path, class: 'dropzone', id: 'upload-dropzone', method: :post, multipart: true do 4 %div.fallback 5 = file_field_tag :list_file 6 %p.btn 7 %a#csvup 8 = image_tag "img/csv_upload/btn.png", size: "318", alt: "登録"
ruby
1 //actionメソッド 2 def insert_preview 3 @file = Article.file_encode(params[:list_file]) 4 end
結果
ActionController::UnknownFormat - User::ArticleController#insert_preview is missing a template for this request format and variant. request.formats: ["application/json"] request.variant: []:
試してみた事
従来(通常のファイル選択でsubmit)の時はrequest.formatが
#<Mime::Type:0x00007fc328c565f0 @hash=3837916798059684840, @string="text/html", @symbol=:html, @synonyms=["application/xhtml+xml"]>
だったが、修正後(dropzone使用)は、
#<Mime::Type:0x00007fc328c4fb10 @hash=795276754310913903, @string="application/json", @symbol=:json, @synonyms=["text/x-json", "application/jsonrequest"]>
になっており、これが原因だろうと判断して
actionメソッドの先頭でrequest.format = :htmlにし、request.formatは
#<Mime::Type:0x00007fc328c565f0 @hash=3837916798059684840, @string="text/html", @symbol=:html, @synonyms=["application/xhtml+xml"]>
になったが
ActionController::UnknownFormat - User::ArticlesController#insert_preview is missing a template for this request format and variant. request.formats: ["text/html"] request.variant: []:
となり、結局駄目でした。(ご覧の通り、formatは"text/html"になってます。)
テンプレート自体は確かに存在します。
dropzonejsを使うときと使わない時とで、paramsの中身に違いはなく、requestの中身もユニーク生成されるIDなど以外には目立った違いもありません。
何か思い当たる方、何か分かる方、些細な事でもたいへん助かりますので、よろしくお願い致します。
あなたの回答
tips
プレビュー