2010-11-10 22 views
1

J'ai un modèle, qui a et tableau de noms et je veux m'assurer qu'un seul document peut avoir un nom donné. J'essaie d'écrire une validation personnalisée pour gérer cela. Ma validation personnalisée et le modèle ressemblent à ceci au moment:Mongoid: Comment faire pour que Mongoid reconnaisse mes validations ActiveModel personnalisées?

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 

Mais je me validateur inconnu: 'unique_names' (ArgumentError). La documentation de Mongoid indique que chaque modèle inclut ActiveModel :: Validation, que je pensais leur permettre de travailler avec mes validations personnalisées. J'ai également essayé de faire une validation qui hérite de ActiveModel :: Validator et utilise validates_with, mais cela ne marche pas non plus.

Répondre

0

La validation personnalisée fonctionne pour moi avec MongoId, mais je devais lui exiger de mon fichier modèle:

require 'unique_name_validator' 

Peut-être il y a un moyen de configurer rails/MongoId pour prendre automatiquement des validateurs sur mesure?

1

Si vous utilisez Rails 3, votre unique_name_validator.rb ne peuvent pas être pris en charge à sous lib automatiquement sauf si vous ajoutez ce qui suit dans application.rb:

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

Soit autoload fichier lib dans application.rb

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

Ou déposer unique_name_validator.rb-initializer dossier