# バリデーションを好きなときに実行する📝

あるバリデーションをこのフォームでは実行して、管理画面のフォームでは実行しないというように、 各フォームでバリデーションを実行するか指定したい場合、以下のような方法があります。

# コンテキストとして :sample を渡す

コンテキストとして :sample を渡した場合と渡さなかった場合で、バリデーションを実行するか設定できます。

コンテキストの :sample は例で :hoge など他のコンテキストを渡して大丈夫です。

# save(context: :sample)

モデルを保存する前にバリデーションを実行します。

@model.save(context: :sample)

# valid?(:sample)

バリデーションを実行します。

@model.valid?(:sample)

# update

update するときにコンテキストを渡して、バリデーションを実行したい場合は以下のようにすることで実行できます。

@model.attributes = { name: 'テストテスト' }
@model.save(context: :sample)

# コンテキストを渡したとき、バリデーションを実行する

# 方法 1

# app/models/model.rb

validates :name, presence: true, if: -> { validation_context == :sample }

# 方法 2

# app/models/model.rb

validates :name, presence: true, on: :sample

# 方法 3

# app/models/model.rb

validates :name, presence: true, if: :sample?

def sample?
  validation_context == :sample
end

# コンテキストを渡したとき、バリデーションを実行しない

# 方法 1

# app/models/model.rb

validates :name, presence: true, unless: -> { validation_context == :sample }

# 方法 2

# app/models/model.rb

validates :name, presence: true, unless: :sample?

def sample?
  validation_context == :sample
end

# 参考🔗