使用AJAX在RoR中上传文件时“406 Not Acceptable”

时间:2012-11-22 20:39:37

标签: ruby-on-rails ruby ajax render

这是我的观点:

<%= form_for item, :url => comment_item_path(item), :html => {:remote => true, 'portal-transform' => true, :multipart => true} do |f| -%>
    <%= f.fields_for :updates, Update.new, :index => nil do |m| -%>
        <%= m.text_area :comment %><br />
        <%= m.file_field :attachment %>
    <% end -%>
    <%= f.submit "Comment" %>
<% end -%>

控制器动作:

respond_to do |format|
  format.js do
    render :json => {}
  end
end

当我提交的表单中只输入了comment(text_area)字段并将attachment(file_field)字段留空时,它会完全呈现预期的内容。 但是,当我使用attachment提交表单时,结果是:

Completed 406 Not Acceptable in 56ms

我出了什么问题?请指导。

感谢。

1 个答案:

答案 0 :(得分:0)

出于安全原因,浏览器不允许通过AJAX上传文件。但是,如果您将表单的file_field保留为空白,则表单会正常提交而不会出现错误,这可以解释您所看到的行为。

要在Rails 3中通过AJAX上传文件,您可以使用Remotipart gem。

http://os.alfajango.com/remotipart/

以下是一个示例用法:

http://thechangelog.com/post/7576700785/remotipart-rails-3-ajax-file-uploads-made-easy