在Rails Single Table Inhertiance模型中覆盖验证

时间:2016-02-13 00:22:22

标签: validation ruby-on-rails-4 activemodel

假设我有两个使用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验证器格式。

1 个答案:

答案 0 :(得分:2)

您应该可以在Parent

中执行类似的操作
validates :name, presence: true, unless: proc { |c| c.is_a? Child }

不是很棒,但如果你只想要覆盖一个子类,那就很干净了。我相信还有其他方法