Railsで特定のカラムが更新された時だけバリデーションを実行する
Rails5.1からは特定のカラムが更新されたかどうかは、以下のメソッドで判定するようになった。
Save前
{カラム名}_changed?の代わりにwill_save_change_to_{カラム名}? {カラム名}_was の代わりに {カラム名}_in_database
Save後
{カラム名}_changed?の代わりにsaved_change_to_{カラム名}? {カラム名}_was の代わりに {カラム名} _before_last_save
今回はバリデーションなので、Save前のメソッドを使う。
validate :validate_update_hoge, if: :will_save_change_to_hoge? def validate_update_hoge # hoge_in_databaseを使ってバリデーション書く end
これでカラムが更新された場合のみ、変更前と後の値を使ってバリデーションを書ける。