【发布时间】:2016-05-13 16:04:36
【问题描述】:
我定义了一个 class,由于其中定义了许多验证,它变得 fat。因此,我创建了一个自定义验证器,其中包含特定于给定上下文的所有验证,并且工作正常。
但问题是,在验证任何属性时,没有考虑在定义验证时传递的选项。
考虑这个Post 类,
class Post
include Mongoid::Document
field :state
field :description
validates_with PublishableValidator, on: :publish
end
现在,在发布帖子时,必须对其进行描述。所以我用 publish 上下文验证它。
@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
现在,description 验证中有一个限制,对于管理员来说,不要运行此验证(这不是一个好主意,但管理员可以为所欲为:])。
但是当我用空白描述和管理员权限验证它时,它仍然给出错误,而不考虑提供的约束。
建议??
【问题讨论】:
标签: ruby-on-rails validation mongoid activemodel