2012-03-06 1 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

「私はいくつかの他の人々に話をしましたし、彼らはあなたの 感情ジョンとブランドンを共有しているようだ、私はその後、 不要:)と離れて、この1ファイルでしょう。」 - ハリスアミン

デフォルトのスコープは、あなたの問題に最適なソリューションですを知っ 場合

、あなたはモデルとして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'に委譲しますので、' 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があります。これがデフォルトのスコープが非常に重要だと私が信じる理由の1つです。

関連する問題