这是一个非常奇怪的问题,不幸的是我无法提供大量信息,因为我什至不知道从哪里开始诊断问题。我希望有人听到神奇的声音知道该怎么做,我很乐意在必要时澄清一下。
出于某种原因,每当我使用 Chrome 在 Heroku 上提交带有文件附件的新多部分表单时,我都会在提交到默认的“索引”操作时被发送——也就是说,如果我提交了我将被发送到的页面GET 而不是 POST。
我在 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 %>
但同样,这被视为 GET 而不是 POST 请求,所以我只是被重定向到 /documents。即使我:method => :post
在表单定义中手动指定也是如此。
真正非常奇怪的是,这只发生在 Heroku 上,而且只发生在 Chrome 上。这些表单在我使用 Chrome 的本地开发版本或使用 Safari 的 Heroku 上运行良好。
代码中的任何地方都没有发生重定向,当我检查 Heroku 日志时,它只向 /documents 报告 GET,而不是带有后续处理的 POST 可以解释这一点。
任何帮助将不胜感激。我真的不知道从哪里开始尝试解决这个问题。
更新:我正在使用 Chrome for Mac,版本 12.0.742.53 beta。
这是表单输出。
<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"}