Ruby on Rails:在没有给定上下文值时进行验证

Pet*_*ter 5 validation ruby-on-rails

我通过传递上下文来更新记录:

employee.attributes = employee_params
employee.save(context: :age_related_fields)
Run Code Online (Sandbox Code Playgroud)

我知道在模型中我可以有条件地仅对给定的上下文应用验证

validates :date_of_birth, on: :age_related_fields
Run Code Online (Sandbox Code Playgroud)

但是有没有办法在:on条件中使用否定?例如

date_of_birth当上下文不是时验证:personal_fields

Sii*_*ser 8

对于您正在寻找的内容,rails 上有一个被拒绝的拉取请求。

https://github.com/rails/rails/pull/30710

不过,相同的任务也有一个解决方法:

validates :title, presence: true, unless: -> { validation_context == :test }
# or in your case
validates :date_of_birth, unless: -> { validation_context == :age_related_fields }
Run Code Online (Sandbox Code Playgroud)