form_for内で、ActionDispatch::Http::UploadedFileオブジェクトに対してreadメソッドを使うと
incompatible character encodings: ASCII-8BIT and UTF-8
というエラーメッセージが起こります。
ruby
1 2# _form.html.erb 3 4<%= form_for([:manage,@product], url: { action: "create_sorted"}, html: { multipart: true }) do |f| %> 5 <div class="file-upload-area"> 6 <div class="sort-box-container sortable"> 7 <% (@products_images).each do |img| %> 8 <div class="sort-box"> 9 <input type="text" class="form-control" readonly="" /> 10 <div style='border: dashed 1px #ccc;'> 11 <%= hidden_field_tag 'products_images[]', value: img, class: 'uploadFile', style: 'width: 90px; font-size: 16px;' %> 12 <div class="imagePreview item" style='padding: 0; background-image: <%= img.read %>'></div> 13 </div> 14 </div> 15 <% end %> 16 </div> 17 </div> 18 <%= f.hidden_field :area_id, value: @product.area_id %> 19 <%= f.hidden_field :building_name, value: @product.building_name %> 20 <%= f.hidden_field :number, value: @product.number %> 21<% end %>
readメソッドを使っているActionDispatch::Http::UploadedFileオブジェクトは、上から9行目、imgです。
<div class="imagePreview item" style='padding: 0; background-image: <%= img.read %>'></div> の部分ですが、 引っかかっているのは上記コードの下から3行目、 <%= f.hidden_field :building_name, value: @product.building_name %> のところです。UTF-8 の view に対して、ASCII-8BIT の文字列を結合しようとしているのがエラーの原因らしいですが、imgに対してreadメソッドを使ってASCII-8BITに変換されているということなのですが、
ActionDispatch::Http::UploadedFileオブジェクトをバイナリに変える際にUTF-8にする方法がわかりません。なにか方法があるでしょうか?
なにかご教示いただけることがあれば何卒よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/16 02:28
2019/02/16 03:06