Railsのupdateメソッドで特定の条件外でバリデーションをかける
特定の画面からの新規登録だけバリデーションをかけたいなど、 条件を絞ってバリデーションをかけたくなることはよくある。
そんな時は以下のようにsave時にcontextをオプションに渡してあげて、 with_optionsでその時に実行するバリデーションをまとめて設定すればいい。
with_options on: :create_context do validate :validate_create end user.save!(context: :create_context)
ただcontextオプションはupdateメソッドでは使えないので、 更新時で同じことをやりたい場合は、
以下のようにattributesにセットしてからsaveメソッドを使えば出来る。
user.attributes = update_params user.save!(context: :update_context)