前提・実現したいこと
Rails 5.2.3
RailsのctiveStorageを使ってアップロードした画像を保存しているのですが,
アップロードした画像ではなく,app/assets/images/にある画像を保存しようとしました.
activestorageで保存されている画像の型を調べたところActionDispatch::Http::UploadedFile型になっていました.これにapp/assets/images/内にあるファイルを変換しようとしましたが,できていません.
該当のソースコード
#ruby #ActiveStorageを利用した場合,こちらは成功 hash1 = { params.require(:comment).permit(:image).keys[0] => params.require(:comment).permit(:image).values[0]} @comment = Comment.create(hash1)
#ruby #app/assets/images/内の画像を利用した場合,こちらが失敗 output = "app/assets/images/28862.jpg" file_path = ::File.join(Rails.root, output) a = ActionDispatch::Http::UploadedFile.new( filename: File.basename(file_path), type: 'image/jpeg', tempfile: ::File.open(file_path) ) hash1 = { params.require(:comment).permit(:image).keys[0] => a} @comment = Comment.create(hash1)
発生している問題・エラーメッセージ
NoMethodError in CommentsController#create private method `open' called for #<File:0x00007faf971bbd10>
@comment = Comment.create(hash1)のところでエラーがおきています.
試したこと
画像がprivateになっていて開けないとエラーが出ているので.
file_path = ::File.join(Rails.root, output)
を
file_path = File.join(Rails.root, output)
に書き換え,
tempfile: ::File.open(file_path)
を
tempfile: File.open(file_path)
に書き換えましたが,同じエラーのままでした.
あなたの回答
tips
プレビュー