2010-11-10 43 views
1

我有一個模型,它有名稱和數組,我想確保只有一個文檔可以有一個給定的名稱。我試圖編寫一個自定義驗證來處理這個問題。我的自定義驗證和模型看起來像這樣的時刻:Mongoid:我怎樣才能讓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 

但我發現了未知的驗證: 'unique_names'(引發ArgumentError)。 Mongoid文檔說,每個模型都包含ActiveModel :: Validation,我認爲這將允許他們使用我的自定義驗證。我也嘗試過從ActiveModel :: Validator繼承並使用validates_with進行驗證,但這也不起作用。

回答

0

自定義的驗證工作對我來說與mongoid,但我需要需要從我的模型文件:

require 'unique_name_validator' 

或許有配置軌/ mongoid自動選取自定義驗證的方法嗎?

1

如果您使用的Rails 3,您的unique_name_validator.rb可能無法從lib下自動除非你加拿起在application.rb中如下:

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

無論是自動加載的庫文件在application.rb中

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

或丟棄unique_name_validator.rbinitializer文件夾