🏘️

ActiveStorageに複数のRecord_typeを (EOTD No.13)

2020/12/24に公開

こちらAmetaです! 13回目のEOTDです。
今回はActiveStorageを用いての画像管理についてです。

本日のエラー

シチュエーション

今回のエラーはwizard形式でchefテーブルに関連付けしたprofileテーブルのimageを呼び出そうとした際におきました。

データベースを確認してみると、Profileに関連づけられた画像ファイルが一つもありません。
何故こんなことになったのか。。先日実装したwizard形式のコントローラー及びビューファイルを再度確認してみました。

考察

ActiveRecordに保存することのできた別のRecord_type: dishと何が異なるのかを比較してみました。

  1. コントローラー

コントローラーのパラメーターを比較。

#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をマージさせています。

  1. モデルのアソシエーション

#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