在 Rails 单个 Table 继承模型中覆盖验证

Overriding validations in Rails Single Table Inhertiance models

假设我有两个模型使用 Rails 单一 Table 继承。我可以轻松地在子模型中添加验证以使某些字段成为必填字段。但是,如果我想更改验证使子模型中的字段成为可选字段或具有不同的标准(如数字)怎么办?

class Parent
  include Mongoid::Document
  field :name, type: String
  field :age, type: Integer
  validates :name, presence: true
  validates :age,   numericality: { greater_than_or_equal_to: 25 }
end
class Child < Parent
  # how can I make name optional in Child?  
  validates :age,   numericality: { less_than: 25 }
end

我可以通过创建自定义验证方法然后在子 class 中覆盖它们来实现,但我希望有一种方法可以只使用默认的 Rails 验证器格式。

你应该可以在 Parent 中做这样的事情

validates :name, presence: true, unless: proc { |c| c.is_a? Child }

不是很好,但是如果您只有一个要覆盖的子类,那么它非常干净。我相信还有其他方法