Paperclip または CarrierWave に入る前に、エッジ レール ガイド(レール 4.0.0.rc1 と ruby 1.9.3p362 を使用しています)を使用して、Rails のフォーム ヘルパーで基本的なファイル アップロードについて理解しようとしています。
コントローラーで #create を使用してアップロードのメソッドを配置しました。私の計画は、アップロードのファイル名を格納する :image 列を使用して新しいレコードを作成することでした。
私の #create はこれを持っています:
File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'w') do |file|
file.write(uploaded_io.read)
end
Rails ガイドに正確に従うと、ファイルのアップロードが発生し、ファイルは mypublic/uploads
に表示されますが、ブラウザーにエンコード エラーが表示されます。
Encoding::UndefinedConversionError
"\x89" from ASCII-8BIT to UTF-8
\x89 は、ファイル名のサフィックスのドットですか? 例: .png
File.open に 'b' を追加すると、エンコーディング エラーが修正されるという StackOverflow の投稿が見つかりましたが、別のエラーが発生します。このStackOverflow の投稿は私のエラーをカバーしていますが、私は解決策に従っていると思いますが、まだエラーがあります。
File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'wb') do |file|
file.write(uploaded_io.read)
end
次の TypeError が発生しますが、エンコード エラーは発生しません。一方、ファイルはアップロードされます。
TypeError: can't cast ActionDispatch::Http::UploadedFile to string:
私が間違っていることについて何か提案はありますか?Paperclip や CW に移行する前に、この作品を見てよかったと思います。