我有一个大屁股集合,它使用相同的集合,需要以不同的方式过滤
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
字段上进行默认搜索。
答案 0 :(得分:3)
MongoMapper不支持默认范围。在hamin wanted to discuss how to add default scopes ...
时对MongoMapper邮件列表进行解释“我个人不使用默认范围。每当我尝试时,它最终都会咬我。” - Brandon Keepers
“我同意Brandon。我从来没有使用default_scope。从长远来看,它总是会让你感到沮丧。创建一个范围/方法并且总是使用那种方法会更好。” - John Nunemaker
“我和其他几个人谈过,他们似乎分享了你的 情绪约翰和布兰登。我会把这个归档为 不必要:)“ - 哈里斯阿明
如果您知道默认范围是您的问题的正确解决方案,您可以使用MongoMapper的Single Collection Inheritance module作为模型来破解它:
class PaymentLog
# ...
def self.query(options={})
super.tap { |query| query[:type] = "payment" unless options.key?(:type) }
end
end
答案 1 :(得分:2)
我发现MongoMapper不支持默认作用域,但只是因为默认情况下不会按任何方式对文档进行排序。 SQL数据库至少有一个自然使用的增量id。这是我认为默认范围非常重要的一个原因。