Область действия по умолчанию

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

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.


person Joseph Le Brech    schedule 06.03.2012    source источник


Ответы (2)


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

«Лично я не использую прицелы по умолчанию. Каждый раз, когда я пытался, это заканчивалось тем, что меня кусали». - Брэндон Хранители

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

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

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

class PaymentLog
  # ...
  def self.query(options={})
    super.tap { |query| query[:type] = "payment" unless options.key?(:type) }
  end
end
person Brian Hempel    schedule 07.03.2012
comment
так что это переопределяет метод запроса по умолчанию, когда я это делаю, например, paymentLog.all. - person Joseph Le Brech; 08.03.2012
comment
@JosephLeBrech да, MongoMapper делегирует all в query, поэтому в итоге PaymentLog.query.all...query является украшенным Plucky::Query github.com/jnunemaker/mongomapper/blob/master/lib/mongo_mapper/ - person Brian Hempel; 09.03.2012
comment
Я так понимаю, что там вообще нет места? Потому что, когда я делаю Object.first или Object.last, все равно появляется тот же объект. - person Trip; 15.08.2012
comment
Но как это сделать? - person Sandip Mondal; 10.09.2013

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

person Doobie    schedule 08.03.2012