假设我有两个使用Rails单表继承的模型。我可以轻松地在子模型中添加验证以使某些字段成为必需。但是,如果我想要改变验证在Child模型中使字段可选或具有不同的标准(如数字),该怎么办?
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
我可以通过创建自定义验证方法,然后在子类中覆盖它们,但我希望有一种方法可以使用默认的Rails验证器格式。
答案 0 :(得分:2)
您应该可以在Parent
中执行类似的操作validates :name, presence: true, unless: proc { |c| c.is_a? Child }
不是很棒,但如果你只想要覆盖一个子类,那就很干净了。我相信还有其他方法