🗺️

【Rails】特定のカラムを更新したい場合の対応策

2021/04/22に公開

やりたいこと

ZIPダウンロード処理時に、ダウンロードする画像名を

dl_image_nameカラムに保存・更新したい。が、なぜかできない。

前提条件:別でimageカラムが存在する。

原因

既存のバリデーションに引っかかっていたみたい。

常にバリデーションを実行するようになっていた。

解決策

上記のやりたいことを実行するためには、バリデーションが邪魔。

バリデーションを、以下のような処理で実行しないようにする。

言い換えると、特定の部分で別のバリデーションをする処理にする。

@order.save(context: :update_dl_image_name)

これは、update_dl_image_nameコンテキストで

@orderをバリデーションしてから保存する処理になる。

ここまでできたら、次はバリデーションをありにするか?なしにするか?

バリデーションありにする場合

validates :dl_image_name, on: :dl_image_name # context: :dl_image_nameのときだけバリデーションする

context: :dl_image_nameのときだけバリデーションするようにする。

バリデーションなしにする場合

特になにもしない


上記の対応で無事に保存できた!

前提条件で記載した、別でimageカラムが存在する。

もしこれが存在しない場合も解決策はある。

別の記事で先輩方が詳しくまとめていただいているので、割愛します。

参考サイト

https://railsguides.jp/active_record_validations.html

https://hene.dev/blog/2019/06/03/rails-validation

https://qiita.com/metafalse/items/872d0403e3030aa6db38

Discussion

ログインするとコメントできます