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는 기본 범위를 지원하지 않습니다.

hamin wanted to discuss how to add default scopes ... MongoMapper 메일 링리스트에 설명으로 "나는 개인적으로 기본 범위를 사용하지 마십시오. 내가 시도 때마다, 그것은 나를 물고 끝났다." - Brandon Keepers

"나는 Brandon에 동의합니다. 나는 항상 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는'query'에'all'을 위임하므로'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 데이터베이스에는 적어도 자연스럽게 사용되는 증분 ID가 있습니다. 이것이 기본 범위가 매우 중요하다고 생각하는 이유 중 하나입니다.