はじめに
Ruby on RailsでECサイトを作成する課題に取り組んでいたところ、Active Storageでattachした画像が何度やってもnilになってしまい苦しみました。
私のような稀有な現象に悩む方のために記事として残しておきます。
原因
原因はActive StorageがAttachmentする対象テーブルでデフォルトの連番idを使用しなかったことでした。
テーブルを作成した際に「id」カラム、「created_at(作成日時)」カラム、「updated_at(作成日時)」カラムは自動で作成されます。
しかし、今回作成する商品テーブルでは商品IDを使用するため、自動採番される値ではなく、こちらで決めたユニーク値を設定しました。
Active Storageが作成した「active_storage_attachments」テーブルは連番idを参照しているため紐づけることができずnilが渡されることが原因でした。
例
AttachmentされないDB
item テーブル
id | name | price | description | created_at | updated_at |
---|---|---|---|---|---|
sid-001 | itemName | 1200 | text text text | 2024-01-01 | 2024-01-01 |
active_storage_attachments テーブル
id | name | record_type | record_id | blob_id | created_at |
---|---|---|---|---|---|
1 | image | Item | 0 | 1 | 2024-01-01 |
このように「active_storage_attachments」テーブルの「record_id」が「item」テーブルの「id」を参照していますが値が違うため、うまく結合されません。
おわりに
調べても同じような事例が見つからず苦労しました。
同じようなことをする人がいないということでしょうか。。。
少し心が傷つきました(泣)