1

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

lib/unique_name_validator.rb
class UniqueNamesValidator < ActiveModel::EachValidator
  def validate_each( record, attribute, value )
  end
end
应用程序/模型/MyModel.rb
class MyModel
  include Mongoid::Document

  validates :names, :unique_names => true

  field :names, :type => Array
end

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

4

4 回答 4

1

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

config.autoload_paths += %W(#{config.root}/lib)
于 2011-01-21T05:50:36.957 回答
0

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

require 'unique_name_validator'

也许有一种方法可以配置 rails/mongoid 以自动获取自定义验证器?

于 2010-11-11T15:45:06.943 回答
0

为了唯一性,请使用:

validates_uniqueness_of

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

validates_each也可以。

于 2011-02-04T21:42:14.753 回答
0

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

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

或者unique_name_validator.rb放到initializer文件夹

于 2011-01-21T10:55:58.457 回答