Rails 6.0.0.rc1
class Doc < ApplicationRecor belongs_to :user has_one_attached :file end
例えばこういうモデルがあったときに、fileを他のuserと共有したいといった場合、 まっさきに思いつくのは中間テーブルを作ってUserとDocを多対多にしてしまう方法かもしれないが、 それだと共有されているuserのうち誰かがDocのnameなどを変更すると共有されているUser全員の手元のDocの名前が変更される。
仕様的に正しい場合はそれで構わないが、例えば「共有」ではなく「送付」だったりすると、送付した相手が加えた変更が送信元にも影響を及ぼすのは嬉しくない。
そんな場合は以下のように新しいDoc側で対象のblobを引数にActiveStorage::Attachment#attachを呼ぶとblobを共有できる
doc = Doc.first copied = Doc.create( name: doc.name ) copied.file.attach(doc.file.blob)