我有一个文件上传表单,在提交时,路由到我的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 %>
答案 0 :(得分:1)
form_tag在第一个参数中选择一个URL,然后选择选项。看起来你将它作为第一个参数传递给哈希,所以我猜你的HTML输出不是你想要的。尝试这样的事情:
<%= form_tag revenue_models_parse_upload_path, :method => :put, :multipart => true do [...]