アプリなどを開発するブログ

React Native / Swift / Ruby on Railsなどの学習メモ。


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