- (当たり前だが) form は enctype="multipart/form-data" にすること。 form_tag foo_path, multipart: true
- params[:file] で ActionDispatch::Http::UploadedFile インスタンスがとれる
- params[:file].read でデータが String でとれる
- エンコーディングは ASCII-8BIT (バイナリ)
- 実際は Shift_JIS (CP932) なデータがアップロードされている、とみなして force_encoding する
- アプリケーション内では UTF-8 で扱いたいのでさらに encode する
- CSV.parse のオプション headers: true は必要に応じて。 row_sep は無くても \r\n を解釈してくれた
https://github.com/kyanny/playground/blob/gh-pages/upload_sjis_csv/README.md