0

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>
4

1 に答える 1

2

あなたは電話したいtempfileのではなく[:tempfile]

params[:csv_file].tempfile

のドキュメントでActionDispatch::Http::UploadedFile利用可能なすべてのメソッドを確認できます。

于 2012-12-30T02:17:37.487 に答える