Область по умолчанию Mongomapper - PullRequest
0 голосов
/ 07 марта 2012

У меня есть большая коллекция задниц, которая использует одну и ту же коллекцию, которую нужно фильтровать по-разному

class PaymentLog < ActiveRecord::Base
  include MongoMapper::Document

  set_collection_name "logs"

  ...

  # default scope for payment activity
end

И, например, это.

class SuspiciousActivityLog < ActiveRecord::Base
  include MongoMapper::Document

  set_collection_name "logs"

  ...

  # default scope search for suspicious activity
end

Оба используют одни и те же журналы, но для каждого необходим поиск по умолчанию в поле type.

Ответы [ 2 ]

3 голосов
/ 07 марта 2012

MongoMapper не поддерживает область по умолчанию.Как объясняется в списке рассылки MongoMapper, когда Хамин хотел обсудить, как добавить области по умолчанию ...

"Я лично не использую области по умолчанию. Каждый раз, когда я пытался,это закончилось тем, что кусало меня. "- Brandon Keepers

«Я согласен с Брэндоном. У меня никогда не было возможности использовать default_scope. Это всегда сжигает вас в долгосрочной перспективе. Намного лучше создать область действия / метод и всегда использовать этот метод».- Джон Нунемейкер

«Я поговорил с несколькими другими людьми, и они, похоже, разделяют ваши чувства, Джон и Брэндон. Я поделюсь этим, тогда как ненужный :)» - Харис Амин

Если вы знаете , что область по умолчанию является правильным решением вашей проблемы, вы можете взломать ее, используя модуль наследования единой коллекции MongoMapper в качестве модели:

class PaymentLog
  # ...
  def self.query(options={})
    super.tap { |query| query[:type] = "payment" unless options.key?(:type) }
  end
end
2 голосов
/ 08 марта 2012

Я нахожу довольно отсталым, что MongoMapper не поддерживает области по умолчанию, а только потому, что по умолчанию он не сортирует документы по чему-либо. Базы данных SQL по крайней мере имеют инкрементный идентификатор, который используется естественно. Это единственная причина, по которой я считаю, что область действия по умолчанию очень важна.

...