在Heroku上使用多部分表单路由问题

时间:2011-05-14 05:42:51

标签: ruby-on-rails google-chrome heroku rails-routing

这是一个非常奇怪的问题,遗憾的是我无法提供大量信息,因为我甚至不知道从哪里开始诊断问题。我希望有人听到神奇地知道该怎么做,我很乐意在必要时澄清。

出于某种原因,无论何时我使用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="&#x2713;" /><input name="authenticity_token" type="hidden" value="q8Qv4q9BXdV4yWzsPx9cgZoFGhJHxj6Nzje/SSnYsYo=" /></div>
  ....
  <input type="file" name="document[file]" />
  ....
</form>

路线似乎没有任何问题,包括以下内容:

POST   /documents(.:format)   {:action=>"create", :controller=>"documents"}

1 个答案:

答案 0 :(得分:0)

您可以确认视图中有<%= csrf_meta_tag %>吗?