ゲーム画像を投稿するフォームを作成しています。
投稿項目は、①画像と②テキストと③ゲーム名の三つです。
ajaxでの実装にしたのですが、なぜか画像ありの場合だけ、HTMLでリクエストがされてしまいます。
環境:Rails 5.0.0.1
フォームとコントローラなどは以下の通りです。
▼フォーム(view)
ruby
1 = form_for(@post,html:{id:'post_form', class:'post_form_wrap', multipart: true}, remote: true) do |f| 2 = render 'shared/error_messages', object: f.object 3 .post_game 4 p.selected_game.title_field 5 = f.collection_select :game_id, current_user.following_games.all, :id, :title, prompt: 'ゲームを選択してください' 6 7 .post_image 8 p.selected_image.title_field 9 div.camera_wrap 10 = image_tag('camera.png',alt:'投稿',id:'camera_image') 11 = f.file_field :image, accept: 'image/jpeg,image/png,image/gif',id: 'image_item' 12 13 = f.hidden_field :image_cache 14 - if @post.image? 15 = image_tag @post.image.url ,id: 'post_image_data' 16 - else 17 p#preview No Image 18 19 .post_text 20 p.comment.title_field.clearfix 21 span#comment_chara_count.chara_count 22 = f.text_area :text, class: 'post_form text-counter', placeholder: 'コメント',data: { 'text-counter-tag': '#comment_chara_count', 'text-counter-max': 140 },rows: 4 23 24 ul#js_image_error.input_error 25 .post_submit 26 = f.submit '投稿',id: 'post_submit_btn'
▼controller
ruby
1def create 2 @post = current_user.posts.build(post_params) 3 if @post.save 4 @success = true 5 else 6 @success = false 7 end 8 render 9 end
▼create.js.slim
ruby
1- if @success == true 2 | window.location.href = "/"; 3- else 4 | $('#error_explanation').remove(); 5 | $('.post_body').prepend(" #{ j(render 'shared/error_messages', object: @post )}");
▼画像を未選択でsubmitした場合のログ(問題なく、JS形式でリクエストされます。)
Started POST "/posts" for 10.0.2.2 at 2016-11-07 23:17:40 +0900 Cannot render console from 10.0.2.2! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 Processing by PostsController#create as JS Parameters: {"utf8"=>"✓", "authenticity_token"=>"lZ7HUoMQ4QgWffdON8KNX/PlZaKlVjg4cxO4qvCqKdHG9KMVlzMgFAwjrX1JGL9pOFpOIWdix1WZeMladvtOew==", "post"=>{"game_id"=>"", "image_cache"=>"", "text"=>"testです"}, "commit"=>"投稿"} User Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 11 ORDER BY `users`.`id` ASC LIMIT 1 (0.1ms) BEGIN (0.1ms) ROLLBACK Rendering posts/create.js.slim Rendered shared/_error_messages.html.slim (3.1ms) Rendered posts/create.js.slim (8.9ms) Completed 200 OK in 25ms (Views: 15.0ms | ActiveRecord: 0.8ms)
▼何らかの画像を選択した状態でsubmitすると・・・なぜかHTML形式のリクエストに・・・
Started POST "/posts" for 10.0.2.2 at 2016-11-07 23:17:57 +0900 Cannot render console from 10.0.2.2! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 Processing by PostsController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"lZ7HUoMQ4QgWffdON8KNX/PlZaKlVjg4cxO4qvCqKdHG9KMVlzMgFAwjrX1JGL9pOFpOIWdix1WZeMladvtOew==", "post"=>{"game_id"=>"", "image"=>#<ActionDispatch::Http::UploadedFile:0x007f0c83af3098 @tempfile=#<Tempfile:/tmp/RackMultipart20161107-3362-vcr1e5.PNG>, @original_filename="20161005233954-1021557906.PNG", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"post[image]\"; filename=\"20161005233954-1021557906.PNG\"\r\nContent-Type: image/png\r\n">, "image_cache"=>"", "text"=>""}, "commit"=>"投稿"} User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 11 ORDER BY `users`.`id` ASC LIMIT 1 (0.1ms) BEGIN (0.1ms) ROLLBACK Completed 500 Internal Server Error in 12ms (ActiveRecord: 0.5ms) ActionView::MissingTemplate (Missing template posts/create, application/create with {:locale=>[:ja], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :slim, :coffee, :jbuilder]}. Searched in: * "/home/vagrant/gameparty/app/views" * "/home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/kaminari-0.17.0/app/views" * "/home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/devise-i18n-1.1.0/app/views" * "/home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/devise-4.2.0/app/views" ):
全てがHTML形式になってしまうのであれば、分かるのですが、画像を選択した場合だけなのが全く意味がわかりません。
打開策として、formに「format:'js'」と追記したところ、画像無しの場合は引き続き、問題なく、画像ありの場合は以下のjsが描画されてしまいます。
どなたか、この事象の発生要因などがわかりませんでしょうか??
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。