Rails 3: проблема с проверкой Mongoid

Используя Mongoid, я пытаюсь проверить ввод :code в форме отправки, чтобы убедиться, что они используют правильный код, который уже хранится в базе данных. Существует около 2000+ кодов, поэтому сбор массива вспомогательных методов невозможен.

Как это лучше всего сделать?

Я думал о проверке включения, например:

class Request
include Mongoid::Document 
field :code, type: String      
validates :code, :presence => true, 
                 :inclusion => { :in => proc { Listing.all_codes } }
end

Затем модель со всеми сохраненными кодами, например:

class Listing
include Mongoid::Document
field :code, type: String 

  def self.all_codes
    where(:code => exists?) # <--- this is broken
  end
end

Но я не могу заставить это работать так, как мне хотелось бы. Любая обратная связь будет высоко оценена.


person jbearden    schedule 17.08.2012    source источник


Ответы (1)


Ваша модель запроса выглядит нормально. Но Listing.all_codes должен возвращать массив только кодов. так:

class Listing
  include Mongoid::Document
  field :code, type: String 

  def self.all_codes
    only(:code).map(&:code)
  end
end
person Jesse Wolgamott    schedule 17.08.2012