これは非常に奇妙な問題です。残念ながら、問題の診断をどこから始めればよいかさえわからないため、大量の情報を提供することはできません。誰かが魔法のように何をすべきかを知っていることを願っています。必要に応じて喜んで明確にします。
何らかの理由で、Chrome を使用して Heroku で添付ファイル付きの新しいマルチパート フォームを送信すると、送信時にデフォルトの「インデックス」アクションに送信されます。つまり、送信した場合に送信されるページです。 POST の代わりに GET。
私は Rails で標準の RESTful ルートを使用しているので、routes.rb に次のように記述しています。
resources :documents do
member do
get :download, :follow
end
end
私のフォームはかなり標準的です:
<%= form_for @document, :html => { :multipart => true } do |f| %>
<!-- Form code -->
<% end %>
ただし、これは POST 要求ではなく GET として扱われるため、単純に /documents にリダイレクトされます。:method => :post
これは、フォーム定義で手動で指定しても当てはまります。
本当に奇妙なのは、これが Heroku でのみ発生し、Chrome でのみ発生していることです。フォームは、Chrome を使用するローカル開発バージョンまたは Safari を使用する Heroku で正常に動作します。
コードのどこにもリダイレクトは発生していません。Heroku のログを確認すると、/documents への GET のみが報告されており、これを説明できる後続の処理を伴う POST は報告されていません。
どんな助けでも大歓迎です。これを解決するためにどこから始めればよいか本当にわかりません。
更新: Chrome for Mac、バージョン 12.0.742.53 ベータ版を使用しています。
これがフォーム出力です。
<form accept-charset="UTF-8" action="/documents" class="new_document" enctype="multipart/form-data" id="new_document" method="post">
<div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="q8Qv4q9BXdV4yWzsPx9cgZoFGhJHxj6Nzje/SSnYsYo=" /></div>
....
<input type="file" name="document[file]" />
....
</form>
以下を含むルートに問題はないようです。
POST /documents(.:format) {:action=>"create", :controller=>"documents"}