環境
gem "refile", require: "refile/rails", github: 'manfe/refile'
gem "refile-mini_magick"
Rails 5.2.6
1.目標
Refileのattachment_image_tag
命令でクラウド上の画像を表示したい。
2.状況
-
attachment_field
フォームで保存した画像をattachment_image_tag
命令で呼び出そうとしたところ、Refile::InvalidID in (該当頁)
エラーが発生した。 - マイグレーションファイルに
default: "default.jpg"
等のようなデフォルト値を指定するコードはなかった。(※ https://teratail.com/questions/220379 で、デフォルト値に起因する同挙動エラーの解決報告あり) - 該当レコードを保存した際にはフォーム・ストロングパラメータ・モデル全てに不手際があった。
- 不手際修正後に作成したレコードを
attachment_image_tag
命令で呼び出そうとしたところ、エラー無く成功した。 - エラーを生じるレコードを消去しようとしてrailsコンソールから削除命令を出したが、下記の表示が出て削除できなかった。
2.6.3 :001 > Item.find(1).destroy
Item Load (0.2ms) SELECT "items".* FROM "items" WHERE "items"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
(0.1ms) begin transaction
CartItem Load (0.1ms) SELECT "cart_items".* FROM "cart_items" WHERE "cart_items"."item_id" = ? [["item_id", 1]]
Item Destroy (1.2ms) DELETE FROM "items" WHERE "items"."id" = ? [["id", 1]]
(1.1ms) rollback transaction
Traceback (most recent call last):
1: from (irb):1
Refile::InvalidID (Refile::InvalidID)
3.原因
おそらくレコード投稿時にコードの不手際から誤ったRefileの画像識別子を書き込んでしまったのが原因と思われる。
直接挙動にまではアクセスできていないものの、不手際解消後に投稿したレコードでは問題無く動いている事から確度は高いと思う。
正規の手段では削除できない該当レコードを削除した後で、正しいコードで再登録すれば解決すると思われる。
4.解決
railsターミナルからrails db:migrate:reset
を送る事で全モデルの全レコードも道連れに異常レコードを削除した。
削除後、改めてレコードを投稿した後に該当コードを走らせると、エラー無く描画された。