Псевдоним в Mongoid - PullRequest
       5

Псевдоним в Mongoid

2 голосов
/ 09 декабря 2010

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

Ответы [ 3 ]

5 голосов
/ 16 июля 2011

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

field :fn, :as => :firstname

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

0 голосов
/ 30 декабря 2010

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

  alias :filtered_process :process

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

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

0 голосов
/ 09 декабря 2010

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

class Foo
  include Mongoid::Document

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

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

...