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)
获得这种行为的最简单方法是什么?
一种选择是创建您自己的验证方法,例如
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)