0

さまざまな方法でフィルター処理する必要がある同じコレクションを使用する大きなお尻のコレクションがあります

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フィールドのデフォルト検索が必要です。

4

2 に答える 2

3

MongoMapper はデフォルトのスコープをサポートしていません。Haminがデフォルトのスコープを追加する方法について議論したかったときに MongoMapper メーリング リストで説明したように...

「私は個人的にデフォルトのスコープを使用していません。試すたびに、それは私を噛んでしまいました。」- ブランドン・キーパーズ

「Brandon に同意します。default_scope が役に立ったことは一度もありません。長い目で見れば、常にあなたを苦しめます。スコープ/メソッドを作成し、常にそのメソッドを使用する方がはるかに優れています。」- ジョン・ヌネメーカー

「私は他の数人と話をしましたが、彼らはジョンとブランドンのあなたの感情を共有しているようです。私はこれを不要なものとしてファイルします:)」 - ハリス・アミン

デフォルトのスコープが問題の適切な解決策であることがわかっている場合は、MongoMapper のSingle Collection Inheritance モジュールをモデルとして使用してハッキングできます。

class PaymentLog
  # ...
  def self.query(options={})
    super.tap { |query| query[:type] = "payment" unless options.key?(:type) }
  end
end
于 2012-03-07T19:15:35.427 に答える
2

MongoMapper がデフォルトのスコープをサポートしていないことは非常に遅いと思いますが、それはデフォルトではドキュメントを何もソートしないためです。SQL データベースには、少なくとも自然に使用される増分 ID があります。これが、デフォルト スコープが非常に重要であると私が考える理由の 1 つです。

于 2012-03-08T15:21:17.177 に答える