エラー体験記 画像の保存先をS3に切り替えた後に

概要

Railsアプリを開発していたときの話です。

画像の保存先をローカルからS3に変更したところ、特定のレコードに紐づいている画像が表示されなくなった。

詳細

画像はActiveStorageを用いて、menusテーブルのレコードに対して1対1で紐付け。

menu作成時にフォームから画像を貼り付けた場合には表示に問題はない。

しかし、最初にチームを登録した際に作成されるデフォルトメニューに関しては、写真が表示されない。

デフォルトメニュー作成処理

menu1 = Menu.create(name: "腕立て伏せ", team_id: @team.id)
    menu1.icon.attach(io: File.open(Rails.root.join("app/assets/images/pushup.png")), filename: "pushup.png")

解決方法

上記コードの末尾に

menu1.icon.save

を追加したところ画像が表示されるようになりました。

ローカルに画像を保存していたときには不要な記述だったので理由はわかりませんが・・・

補足

画像の保存先をS3に切り替えると、画像が保存されているかどうかをSequel Proで確認することができなくなります。

ターミナルのコンソールパネルかS3のバゲットから確認するようにしましょう。