我有一个模型,它有一系列名称,我想确保只有一个文档可以有一个给定的名称。我正在尝试编写自定义验证来处理这个问题。我的自定义验证和模型目前看起来像这样:
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的验证,但这也不起作用。
答案 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)