3

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 に移行する前に、この作品を見てよかったと思います。

4

1 に答える 1