ActiveStorageエラー(タスケテ)
PF修正中ある日のこと、突然ユーザー詳細画面でエラーに・・・(悲劇)
なんだこれ・・・
というのも、つい数時間前まで普通に動いていたのですが
変更点としてはせいぜいレイアウト変えたり整理するため
rails db:resetでレコードを初期化したり(特に初めて行ったわけではない)
で、どの状態でエラーが出るかというと
「ユーザー新規登録→登録ボタンから詳細ページに遷移→getメソッドの途中でエラー」
よし、しらべるぞ。
コンソールでまずはUser.allと・・
→登録したユーザー情報出てくる。登録自体はできているのね。
次にプロフィール画像がattachされているか
user = User.first
user.profile_image.attached?
→
ActiveStorage::Attachment Load (0.2ms) SELECT "active_storage_attachments".* FROM "active_storage_attachments" WHERE
"active_storage_attachments"."record_id" = ? AND
"active_storage_attachments"."record_type" = ? AND
"active_storage_attachments"."name" = ? LIMIT ? [["record_id", 1], ["record_type", "User"], ["name", "profile_image"], ["LIMIT", 1]]
=> false
む?attachされてないってこと・・・?ですよね・・・
そのままコンソールで手入力で登録してみる・・・
2.6.3 :004 > file_path = Rails.root.join('app/assets/images/no_image.jpg')
=> #<Pathname:/home/ec2-user/environment/style/app/assets/images/no_image.jpg>
2.6.3 :005 > profile_image.attach(io: File.open(file_path), filename: 'default-image.jpg', content_type: 'image/jpeg')
Traceback (most recent call last):
1: from (irb):5
NameError (undefined local variable or method `profile_image' for main:Object)
profile_imageがネームエラーだと・・・?(白目)
あばばばば
次、プロフィール画像が恋しいのでひとまずView側で分岐
<div class="profile-image">
<% if @user.profile_image.attached? %>
<%= image_tag @user.get_profile_image(200, 200), class: "profile" %>
<% else %>
<%= image_tag 'no_image.jpg' %>
<% end %>
</div>
ここからeditで画像登録できるか・・・
・・・
はい、同じくエラー。ですよね
気になる点が
"ActionDispatch::Http::UploadedFile"
これは一体・・
参考(
ActionDispatch::Http::UploadedFileを紐解く
)
大丈夫らしい。
ってことはデータを送れてはいるものの表示ができないと・・・
一旦最後のあがき
profile_image.variant(resize_to_limit: [width, height])
思い切ってprocessed除いてみることに
edit・・・
やはりattachされていない・・・
<進展>
https://qiita.com/yutackall/items/8809f08635ec628709c5
こちらを参考に手打ちで登録してみることに・・
user.profile_image.attach(io: File.open("#{Rails.root}/app/assets/images/no_image.jpg"), filename: "default-image.jpg", content_type: 'image/jpeg')
Userを見つけられていない・・・?
ちなみに正常なものだと・・
User.exist?は働かないみたい・・
一旦、ActiveStorageを整理
(参考:Railsガイドhttps://railsguides.jp/active_storage_overview.html)
そもそもActiveStorage自体は3つのテーブルで成り立っている
・active_storage_variant_records
・active_storage_blobs
・active_storage_attachments