thoughtbot(翻訳)|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社エンジニアの「?」を「!」に。thoughtbot(翻訳)hachi8833シェアツイートブックマークLINE概要MITライセンスに基いて翻訳・公開いたします。MIThttps://github.com/thoughtbot/paperclipより翻訳後に更新が入っていますのでご注意ください。thoughtbot(翻訳)PaperclipとActiveStorageは、いずれも同じような問題に対して類似のソリューションを提供しますので、一方から他方への移行は単純なデータ書き換えとなります。PaperclipからActiveStorageへの移行手順は次のとおりです。ActiveStorageデータベースマイグレーションを適用するActiveStorageのインストール指示に沿って進めます。gemを追加しておきたいと思うことでしょう。リンク先はedgeguidesです)。データベースのデータをコピーするActiveStorageは、active_storage_blobsテーブルとactive_storage_attachmentsテーブルをファイルメタデータで検索できることを前提とします。Paperclipはこれらのファイルメタデータを、関連付けられたオブジェクトのテーブルに直接保存します。avatarを1つ持つUserを例に説明します。Paperclipの場合は次のようになります。:avatarendPaperclipマイグレーションによって、次のようなテーブルが生成されます。"avatar_updated_at"endこれを以下のテーブルに変換します。trueendファイルを元の置き場所から変えないことを前提にする場合、以下がマイグレーションとなります。それ以外の場合は、次のセクションを先に読んでマイグレーションを適宜変更してください。ファイルをコピーする上記のマイグレーションではファイルはそのままになります。PaperclipとActiveStorageでは、ファイルのデフォルトの置き場所が異なっています。Paperclipの場合、デフォルトでは以下のように置かれます。public/system/users/avatars/000/000/004/original/the-mystery-of-life.pngActiveStorageの場合は以下のようになります。storage/xM/RX/xMRXuT6nqpoiConJFQJFt6c9このxMRXuT6nqpoiConJFQJFt6c9がactive_storage_blobs.keyの値に該当します。上のマイグレーションでは単にファイル名を使いましたが、代わりにUUIDを使うこともできます。Storage、GCSなど)に配置されているファイルの移行は、本ドキュメントの冒頭の説明の範囲外となります。ローカルディスクストレージがあるかどうかの探索は以下のようになります。アプリのテストを更新するhave_attached_fileに代わる独自のマッチャーを書く必要があります。以下は、Paperclipが提供するマッチャーとコンセプト的に近いマッチャーです。ビューを更新するPaperclipの場合は以下のような感じになります。@user.avatar.url(:medium)ActiveStorageの場合は以下のような感じになります。コントローラを更新するコントローラの更新は不要なはずです。上述のデータベーススキーマをチェックしてみるとJOINがあるかもしれません。コントローラが次のようになっているとします。User.all.order(:name)endビューは次のようになっているとします。%></ul>ループ内で添付ファイルを毎回読み込んでいるので、これではN+1問題が発生してしまいます。そこで、コントローラやモデルが変更なしでも問題なく動作しているとしても、ループを再チェックして必要ならincludesを足したいと思うことでしょう。ActiveStorageは、avatar_attachmentリレーションシップとavatar_blobリレーションシップをhas-oneリレーションに追加し、avatar_attachmentsリレーションとavatar_blobsリレーションをhas-manyに追加します。edgeguidesのファイルをレコードに添付する方法に沿って進めます。avatarを1つ持つUserは次のように表されます。:avatarendすべてのリサイズは、ビューでvariantとして行われます。gemを削除してbundleを実行します。テストを実行して完了を確認してください。コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。チュートリアル第2版の監修および半分程度を翻訳、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れて更新翻訳中。enno.jpを運営。実は最近Go言語が好きで、Goで書かれたRubyライクなGoby言語のメンテナーでもある。仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。Storageを使ってはいけない(翻訳)#Tags#会社紹介#自社サービス#勉強会#Rails#PHP#デザイン#実績#週刊RailsウオッチCONTACTお気軽にご相談ください。(翻訳)CONTACTTechRachoでは、パートナーシップをご検討いただける方からのご連絡をお待ちしております。お気軽にご意見・ご相談ください。