QA@IT

[rails]form_tagでファイルを送信するには?

2936 PV

現在railsで開発をしているのですが、fileがフォームから遅れなくて困っています。
以下に詳細を記述していきます。

ーー環境ーー
rails 3.2
ruby 1.9.3

ーーエラー内容ーー
フォームでファイルを指定して送信しても、コントローラ側ではファイル名のStringとして認識されてしまう(ファイルのデータはわたっていない)。

ーーView側のソースーー
<%= form_tag(:action => "create" ,:multipart => true) do %>
<%= label_tag 'jsonファイルをアップロードしてください' %>
<%= file_field_tag "file" %>

<%= submit_tag "ファイル送信" %>
<% end %>

ーーView側のソースをhtmlでみた場合ーー

Jsonファイルをアップロードしてください

ーーエラーに対して取った対策ーー
multipart => trueを指定する。

何かお気づきの点がございましたらご指摘いただけると幸いです。

  • [rails] の部分はタグとして rails にしてもらえるとタグ rails で後から参照が容易になります。もしくは"rails の form_tag で..."とタイトルを変更してもよさそうです。 -

回答

form_tagのシグネチャは

http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-form_tag

によると

form_tag(url_for_options = {}, options = {}, &block)

ですが、

form_tag(:action => "create" ,:multipart => true)

こうかくと、:actionと:multipartがひとつのハッシュとみなされてしまいますよね。

form_tag { :action => "create" }, { :multipart => true }

と書くか、あるいはnamed routeを定義して

form_tag create_path, :multipart => true

などとすればよいのではないでしょうか。

編集 履歴 (0)
  • なるほど、ハッシュになってパラメータとしてわたってしまったのですね。
    おかげさまで解決できました。ありがとうございます。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。