Псевдоним поля в Mongoid

Кто-нибудь знает, встроена ли в Mongoid поддержка имен полей псевдонимов? Я провел несколько тестов, в которых у меня есть коллекция с минимальным количеством полей (7 полей). Если я использую описательные имена и загружаю реальные данные, а затем использую сильно укороченные имена и загружаю те же самые данные из реального мира, общий размер моей коллекции уменьшается на 40%. Глядя на другие драйверы для MongoDB (не Ruby), я вижу, что некоторые из них имеют встроенную поддержку, где вы можете писать код с описательным именем, но постоянство достаточно умно, чтобы использовать определенные разработчиком псевдонимы. Я просто пытаюсь определить, есть ли у Монгоида что-то подобное.


person Chris Dellinger    schedule 09.12.2010    source источник


Ответы (3)


На самом деле, для передачи хэша в new или update_attributes также необходимо включить следующее:

  alias :filtered_process :process

  def process(attrs = nil)
    attrs[:fn] = attrs[:first_name] unless attrs.nil?
    filtered_process(attrs)
  end

Это позволяет сопоставить ваш псевдоним с полем при вызовах создания или обновления. Было бы тривиально затем отслеживать псевдонимы для сопоставлений полей, чтобы абстрагировать этот процесс.

person justdewit    schedule 30.12.2010
comment
Это не лучший способ сделать это, см. ответ от z3cko, поскольку псевдоним ruby ​​​​добавляет другое имя метода, когда у mongoid уже есть способ сделать это. - person Michael Papile; 19.07.2012

на самом деле лучший способ сделать это НЕ использовать псевдоним ruby, а:

field :fn, :as => :firstname

как указано здесь: http://groups.google.com/group/mongoid/browse_thread/thread/ce3298d6a167bd70

person z3cko    schedule 15.07.2011

Согласно этому ответу, вы должны просто использовать alias следующим образом:

class Foo
  include Mongoid::Document

  field :fn, :type => String
  alias :first_name :fn
end

Имейте в виду, что это не позволит вам использовать псевдоним в запросах и может вызвать некоторые ошибки. Это должно подойти для простого использования в методах экземпляра и представлениях.

person bowsersenior    schedule 09.12.2010