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 不支持默认范围。正如在 MongoMapper 邮件列表中解释的那样,当hamin 想讨论如何添加默认范围时......

“我个人不使用默认范围。每次尝试时,它都会咬我。” - 布兰登守护者

“我同意 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。这是我认为默认范围非常重要的一个原因。

于 2012-03-08T15:21:17.177 回答