Mongoid:如何让Mongoid识别我的自定义ActiveModel验证?

时间:2010-11-10 21:21:43

标签: ruby-on-rails validation mongodb mongoid activemodel

我有一个模型,它有一系列名称,我想确保只有一个文档可以有一个给定的名称。我正在尝试编写自定义验证来处理这个问题。我的自定义验证和模型目前看起来像这样:

lib/unique_name_validator.rb
class UniqueNamesValidator < ActiveModel::EachValidator
  def validate_each( record, attribute, value )
  end
end
app/models/MyModel.rb
class MyModel
  include Mongoid::Document

  validates :names, :unique_names => true

  field :names, :type => Array
end

但是我得到了Unknown验证器:'unique_names'(ArgumentError)。 Mongoid文档说每个模型都包含ActiveModel :: Validation,我认为它允许它们使用我的自定义验证。我也尝试过继承自ActiveModel :: Validator并使用validates_with的验证,但这也不起作用。

4 个答案:

答案 0 :(得分:1)

如果您使用的是Rails 3,则除非您在application.rb中添加以下内容,否则您的unique_name_validator.rb可能无法从lib下自动获取:

config.autoload_paths += %W(#{config.root}/lib)

答案 1 :(得分:0)

自定义验证适用于mongoid,但我需要从我的模型文件中获取它:

require 'unique_name_validator'

也许有办法配置rails / mongoid来自动选择自定义验证器?

答案 2 :(得分:0)

application.rb中的自动加载lib文件

config.autoload_paths += %W(#{config.root}/lib)

或将unique_name_validator.rb放到initializer文件夹

答案 3 :(得分:0)

为了获得独特性,请使用:

validates_uniqueness_of

(来自http://mongoid.org/docs/validation/

validates_each也有效。