🏘️
ActiveStorageに複数のRecord_typeを (EOTD No.13)
こちらAmetaです! 13回目のEOTDです。
今回はActiveStorageを用いての画像管理についてです。
本日のエラー
シチュエーション
今回のエラーはwizard形式でchefテーブルに関連付けしたprofileテーブルのimage
を呼び出そうとした際におきました。
データベースを確認してみると、Profileに関連づけられた画像ファイルが一つもありません。
何故こんなことになったのか。。先日実装したwizard形式のコントローラー及びビューファイルを再度確認してみました。
考察
ActiveRecordに保存することのできた別のRecord_type: dishと何が異なるのかを比較してみました。
- コントローラー
コントローラーのパラメーターを比較。
#Profileのコントローラー
def profile_params
params.require(:profile).permit(:image, :about, :business_hour_begin, :business_hour_end, :status_id, :gender_id, :age_id, :genre_id)
end
#Dishのコントローラー
def dish_params
params.require(:dish).permit(:image, :name, :about, :genre_id, :ready_id, :price).merge(chef_id: current_chef.id)
end
両者ともにimage
がpermitメソッドに指定されています。
ただdishはシェフによって作成されるのでシェフのidをマージさせています。
- モデルのアソシエーション
#Profileのモデル
belongs_to :chef, optional: true
has_one_attached :image
#Dishのモデル
belongs_to :chef
has_one_attached :image
唯一の違いはoptional:trueを含んでいるか。
Profileの方では一つ前のページで入力したシェフの情報をセッションに保持させているので、optionalを設定してバリデーションを無効化しています。
SOTD(Summary Of The Day)
またもや本日中に解決することができませんでした。
やっと一日が終わったと思った頃にエラーが発生することが多い今日この頃。
エラーは気の抜け目にやってくる。今日の学びです。。
Discussion