💎
[Rails]Shrine(gem)で異なるモデル間のファイルコピーをする方法(remote_url)
Srhineとは?
Srhineとは、Ruby Webアプリケーション(Ruby on Rails等)でファイルを取り扱う時に使用する、ライブラリです。
異なるモデル間でファイルをコピーする方法の1つとして、「ファイルをダウンロードしてから、再度アップロードし直す」方法があります。
上記の方法の中でも、色々な実装方法があります。
- コピーするURLを指定して、HTTP経由でダウンロード&アップロードをする方法
- Attacherを使ってコピーする方法
- remote_urlを使ってコピーする方法
この記事では、remote_urlを使ったコピー方法を、下記の3つのステップに分けて解説していきます。
目次
- 事前準備
- ファイルのURLを取得する
- ファイルをアップロードする
事前準備
remote_url の方法を使うには、uploader に remote_url を使う宣言をする必要があります。
Uploaderクラスを作成し、下記のようにpluginを読み込ませてください。
class ApplicationUploader < Shrine
plugin :remote_url, max_size: 20*1024*1024
end
ファイルのURLを取得する
アップロードしたファイルのURLを取得します。
S3を使っている場合は、public readで設定しておく必要があります。
url = record.image.present? ? record.image.url : nil
ファイルをアップロードする方法
ファイルをアップロードするには、<カラム名>_remote_url
にセッターが用意されています。このセッターに代入します。
duplication.image_remote_url = url
このままsaveすると、ダウンロードとアップロードが同時に実行されます。
Discussion