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