0

送信すると、parse_uploadアクションにルーティングされるファイルアップロードフォームがあります。ただし、ファイル、またはファイルアップロードオブジェクトに付属する属性(original_filename、content_type)のいずれかを取得しようとすると、エラーが発生します。私が正しく理解していれば、ファイルは元のファイルと同じ名前で#{Rails.root} / public/uploadsに保存する必要があります。

アプリを実行すると、parse_uploadアクションでNoMethodErrorを示すエラーが発生します

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

...私のアップロードにはこれらのメソッドが含まれていませんか?ファイル(およびアップロードディレクトリ)も存在しません。助けてください、私は以下のすべての関連ファイルをリストしました:

ルート.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 %> 
4

1 に答える 1

1

form_tag は、最初の引数に URL を取り、次にオプションを指定します。代わりに最初の引数としてハッシュを渡しているように見えるので、HTML 出力は探しているものではないと推測します。次のようなことを試してください:

<%= form_tag revenue_models_parse_upload_path, :method => :put, :multipart => true do [...]
于 2013-02-25T19:09:08.537 に答える