質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

488閲覧

RailsでDropzoneを使うとテンプレートが無いというエラーになる

hassan2019

総合スコア15

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/05/30 08:53

編集2020/05/30 08:56

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など以外には目立った違いもありません。
何か思い当たる方、何か分かる方、些細な事でもたいへん助かりますので、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問