1日1%成長するブログ

毎日成長するために仕事/プライベートで得た学びをアウトプットするブログです

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)