Mongoid: Как заставить Mongoid распознавать мои пользовательские проверки ActiveModel? - PullRequest
1 голос
/ 11 ноября 2010

У меня есть модель с массивом имен, и я хочу убедиться, что только один документ может иметь данное имя. Я пытаюсь написать пользовательскую проверку, чтобы справиться с этим. Моя пользовательская проверка и модель на данный момент выглядят так:

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, но это тоже не работает.

Ответы [ 4 ]

1 голос
/ 21 января 2011

Если вы используете Rails 3, ваш unique_name_validator.rb не может быть выбран из-под lib автоматически, если вы не добавите в application.rb следующее:

config.autoload_paths += %W(#{config.root}/lib)
0 голосов
/ 05 февраля 2011

Для уникальности используйте:

validates_uniqueness_of

http://mongoid.org/docs/validation/)

validates_each тоже работает.

0 голосов
/ 21 января 2011

Либо файл автозагрузки lib в application.rb

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

Или перетащите unique_name_validator.rb в initializer папку

0 голосов
/ 11 ноября 2010

У меня есть пользовательская проверка с mongoid, но мне нужно было указать ее в файле модели:

require 'unique_name_validator'

Возможно, есть способ настроить рельсы / mongoid для автоматического выбора пользовательских средств проверки?

...