我已经定义了一个类,因为它中定义了许多验证,因此胖。因此,我创建了一个自定义验证器,其中包含特定于给定上下文的所有验证,并且它工作正常。
但问题是,虽然验证任何属性,但在定义验证时传递的选项并未得到考虑。
考虑这个Post
类,
class Post
include Mongoid::Document
field :state
field :description
validates_with PublishableValidator, on: :publish
end
现在,在发布帖子时,其描述是强制性的。所以我使用发布上下文来验证它。
@post.valid?(:publish)
所有可发布验证的自定义验证程序定义为
class PublishableValidator < ActiveModel::Validator
include ActiveModel::Validations
validates :description, presence: true, unless: :admin?
def validate(post)
self.class.validators.each do |validator|
validator.validate(post)
end
end
end
现在,描述验证存在限制,对于管理员来说,不要运行此验证(不是一个好主意,但管理员可以做任何他们想做的事情:])。
但是当我使用空白描述和管理员权限验证它时,它仍会出错,而不考虑提供的约束。
建议??
答案 0 :(得分:1)
我设法使用SimpleDelegator
类来解决它。
PublishableValidator
继承了SimpleDelegator
。PublishableValidator
对象@post
。post
对象。 更新了PublishableValidator
class PublishableValidator < SimpleDelegator
include ActiveModel::Validations
validates :description, presence: true, unless: :admin?
def validate(post)
self.__setobj__(post)
super
post.errors.messages.merge!(self.errors.messages)
end
end
感谢blog