使用 ActiveModel::Validations 验证嵌套模型

Dav*_*ner 5 ruby validation ruby-on-rails activemodel

我的应用程序使用带有 的普通 Ruby 类ActiveModel::Validations,而没有实现ActiveRecord

class Car
  include ::ActiveModel::Validations

  attr_accessor :engine
end

class Engine
  include ::ActiveModel::Validations

  attr_accessor :cylinders
  validates_presence_of :cylinders
end
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想Car检查 的嵌套属性。ActiveModel::Validationsengine

car = Car.new
car.engine = Engine.new

car.engine.valid? # => false
car.valid?        # => true
                  # It should return 'false',
                  # because 'engine.cylinders' is 'nil'
Run Code Online (Sandbox Code Playgroud)

获得这种行为的最简单方法是什么?

Agu*_*ico 3

一种选择是创建您自己的验证方法,例如

class Car
  include ::ActiveModel::Validations

  attr_accessor :engine

  validate :engine_must_be_valid

  def engine_must_be_valid
    errors.add(:base, "Engine is not valid") unless engine.valid?
  end
end
Run Code Online (Sandbox Code Playgroud)