form_tagでファイルアップロード時はmultipart:trueを省略しない[Rails4]
form_tagを使ってファイルアップロードフォームを作っていたらエラー発生。
undefined method `original_filename' for "my_image.png":String
ちなみにcontrollerは
def edit_photo if request.post? filename = params[:file].original_filename end end
ファイルではなく文字列がフォームに渡されちゃってたみたいです。
Rails4から、フォーム内にfile_fieldがある時は
勝手に multipart: true にしてくれるというのを見た気がしたので
記述を省略していたのですがそれがいけなかったみたい。
<%= form_tag( {action: :edit_photo}, multipart: true) do %> <%= file_field_tag :file %> <%= submit_tag %> <% end %>
省略していいのは、form_forの時で、form_tagの時は明記しないとダメぽいです。
#参考
http://guides.rubyonrails.org/form_helpers.html#uploading-files