表单中的file_field不上传任何内容

时间:2013-02-23 00:39:25

标签: ruby-on-rails-3 file-upload controller routes controller-action

我有一个文件上传表单,在提交时,路由到我的parse_upload操作。但是,当我尝试检索文件或文件上载对象(original_filename,content_type)附带的任何属性时,我收到错误。如果我理解正确,该文件应存储在#{Rails.root}/public/uploads under the same name as the original file

当我浏览我的应用程序时,我的parse_upload操作中出现错误,指出NoMethodError

NoMethodError in RevenueModelsController#parse_upload
     undefined method `original_filename' for "rails_upload_test.xlsx":String

...我的上传不包含这些方法?文件(和上传目录)也不存在。请帮忙,我列出了以下所有相关文件:

的routes.rb

resources :revenue_models do
  get 'upload', :on => :collection
end
match 'revenue_models/upload' => 'revenue_models#parse_upload', :via => :post
root :to => "home#index"

控制器操作:

# UPLOAD create instance variable, call onto upload form, and route to parse_upload action
def upload
    @uploaded_doc = { :workbook => RubyXL::Parser.new }
end
# Parse the uploaded file
def parse_upload
    file_name = (params[:uploaded_doc][:workbook]).original_filename
end

upload.html.erb - 上传表单提交到parse_upload操作

<%= form_tag(:url => {:controller => "revenue_models", :action => parse_upload_revenue_models_path}, :html => {:method => "put", :multipart => true}) do %>
    <%= file_field(:uploaded_doc, :workbook) %>
    <%= submit_tag("Upload File") %>                                                 
<% end %> 

1 个答案:

答案 0 :(得分:1)

form_tag在第一个参数中选择一个URL,然后选择选项。看起来你将它作为第一个参数传递给哈希,所以我猜你的HTML输出不是你想要的。尝试这样的事情:

<%= form_tag revenue_models_parse_upload_path, :method => :put, :multipart => true do [...]