Rubyと筋肉とギターとわたし

筋トレが仕事です

【Ruby on Rails】rails consoleでActionDispatch::Http::Uploadedfileを作成・保存する

どうもてぃ。

久しぶりのRailsで少々ハマったのでメモをば。

やりたいこと

ローカルのファイルを読み込んで、carrierwaveに割り当てているカラムに保存したい。

ただそれだけ。

Let's go

まずはファイルの読み込み。

今回はtmp/uploads/配下にファイルを作っているものとします。

path = Dir.glob(Rails.root.join('tmp', 'uploads', 'test.pdf'))

filename = File.basename(path)
tempfile = File.open(path)

とりあえずこれで準備はおk

ActionDispatch::Http::Uploadedfileで読み込む

上記を使って読み込みます。

uploaded_file = ActionDispatch::Http::Uploadedfile.new(
  filename: filename,
  type: 'application/pdf',
  tempfile: tempfile
)

User.first.update(file: uploaded_file)

UserモデルにUserFileUploaderをマウントしたfileカラムがあるものとして保存してます。

class User < ApplicationRecord
・
・
・
  # ↓こういうやつ
  mount_uploaders :file, UserFileUploader 
・
・
・
end

終わり

ファイルタイプによってtypeをimage/jpegとかに変えれば画像もちゃんと保存できます。

定期的にRailsに触っておかないと忘れちゃいますね。