2012-03-06 3 views
0

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

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 поля.

ответ

3

MongoMapper не поддерживает объем по умолчанию. Как поясняют в списке рассылки MongoMapper когда hamin wanted to discuss how to add default scopes ...

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

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

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

Если вы знаете , что область действия по умолчанию является правильным решением для вашей проблемы, вы можете взломать его с помощью MongoMapper-х Single Collection Inheritance module в качестве модели:

class PaymentLog 
    # ... 
    def self.query(options={}) 
    super.tap { |query| query[:type] = "payment" unless options.key?(:type) } 
    end 
end 
+0

так что это переопределяет метод запроса по умолчанию, когда я это делаю, например, 'paymentLog.all'. –

+0

@JosephLeBrech да, MongoMapper делегирует 'все'' 'запрос', поэтому он заканчивается как' PaymentLog.query.all' ... 'query' - это украшенный' Plucky :: Query' https://github.com/ jnunemaker/mongomapper/blob/master/lib/mongo_mapper/plugins/querying.rb # L63-70 –

+0

Насколько я понимаю, нет никакой области. Потому что, когда я делаю 'Object.first' или' Object.last', он все равно вызывает тот же объект. – Trip

2

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

Смежные вопросы