CSVファイルをコントローラーにアップロードして、その中のデータにアクセスしようとしています。
コントローラのコードは次のとおりです。
class DatabaseImporterController < ApplicationController
def index
end
def import
# Receive the uploaded CSV file and import to the database.
csv_file = params[:csv_file]
logger.debug { csv_file.inspect }
#CSV.foreach("parse.csv") do |row|
#end
render :template => "database_importer/index"
end
end
そしての出力logger.debug
:
{"utf8"=>"✓",
"authenticity_token"=>"Z4+XlmrcH+8JPL6Yq52ymVOMfiGEI9mN8LuoxoBLp8M=",
"csv_file"=>#<ActionDispatch::Http::UploadedFile:0x007feca81b3fb8 @original_filename="Install-Linux-tar.txt", @content_type="text/plain", @headers="Content-Disposition: form-data; name=\"csv_file\"; filename=\"Install-Linux-tar.txt\"\r\nContent-Type: text/plain\r\n", @tempfile=#<File:/tmp/RackMultipart20121229-10294-1ngf634>>,
"commit"=>"Import CSV Car Database",
"controller"=>"database_importer",
"action"=>"import"}
Ruby on Railsの公式ページのドキュメントに準拠:
paramsハッシュのオブジェクトは、IOのサブクラスのインスタンスです。アップロードされたファイルのサイズに応じて、実際にはStringIOまたは一時ファイルでバックアップされたFileのインスタンスである可能性があります。
私が理解しているように、アップロードされたファイルは私のディスクのどこかにあり(私のHerokuインスタンス)、一時的にアクセスできます。
ファイルにアクセスするにはどうすればよいですか?次のことを試しましたが、エラーメッセージが表示されます。
csv_file = params[:csv_file][:tempfile] # This is how I try to get the file page of the temporary file.
undefined method `[]' for #<ActionDispatch::Http::UploadedFile:0x007fecb02103c8>