Ruby on rails 3 默认作用域Mongomapper
我有一个大屁股收集使用相同的收集,需要以不同的方式进行过滤Ruby on rails 3 默认作用域Mongomapper,ruby-on-rails-3,mongomapper,default-scope,Ruby On Rails 3,Mongomapper,Default Scope,我有一个大屁股收集使用相同的收集,需要以不同的方式进行过滤 class PaymentLog < ActiveRecord::Base include MongoMapper::Document set_collection_name "logs" ... # default scope for payment activity end class PaymentLog
class PaymentLog < ActiveRecord::Base
include MongoMapper::Document
set_collection_name "logs"
...
# default scope for payment activity
end
class PaymentLog
比如这个
class SuspiciousActivityLog < ActiveRecord::Base
include MongoMapper::Document
set_collection_name "logs"
...
# default scope search for suspicious activity
end
类可疑ActivityLog
两者使用相同的日志,但每个日志都需要在
类型
字段上进行默认搜索。MongoMapper不支持默认范围。如MongoMapper邮件列表中所述,当
“我个人不使用默认范围。每次我尝试,它都会咬我。”-布兰登
“我同意Brandon的观点。我从来没有让默认范围有用过。从长远来看,它总是会让你焦头烂额。最好创建一个范围/方法并始终使用该方法。”-John Nunemaker
“我和其他一些人谈过,他们似乎和我一样
约翰和布兰登的感想。我会把这封信归档
不必要:)“-哈里斯·阿明
如果您知道默认范围是解决问题的正确解决方案,则可以使用MongoMapper作为模型:
class PaymentLog
# ...
def self.query(options={})
super.tap { |query| query[:type] = "payment" unless options.key?(:type) }
end
end
MongoMapper不支持默认范围。如MongoMapper邮件列表中所述,当 “我个人不使用默认范围。每次我尝试,它都会咬我。”-布兰登 “我同意Brandon的观点。我从来没有让默认范围有用过。从长远来看,它总是会让你焦头烂额。最好创建一个范围/方法并始终使用该方法。”-John Nunemaker “我和其他一些人谈过,他们似乎和我一样 约翰和布兰登的感想。我会把这封信归档 不必要:)“-哈里斯·阿明 如果您知道默认范围是解决问题的正确解决方案,则可以使用MongoMapper作为模型:
class PaymentLog
# ...
def self.query(options={})
super.tap { |query| query[:type] = "payment" unless options.key?(:type) }
end
end
我发现MongoMapper不支持默认作用域是相当迟钝的,只是因为默认情况下它不按任何方式对文档进行排序。SQL数据库至少有一个自然使用的增量id。这就是我认为默认范围非常重要的一个原因。我发现MongoMapper不支持默认范围是相当迟钝的,只是因为默认情况下它不按任何方式对文档进行排序。SQL数据库至少有一个自然使用的增量id。这就是我认为默认范围非常重要的一个原因。因此,当我这样做时,它会覆盖默认的查询方法,
paymentLog.all
例如。@JosephLeBrech yes,MongoMapper将all
委托给query
,因此,它最终变成了PaymentLog.query.all
..query
是一个修饰的勇敢的::query
据我所知,根本没有范围。因为当我执行Object.first
或Object.last
时,它仍然会显示相同的对象。但是我如何取消此操作?因此,这会覆盖默认的查询方法,例如,paymentLog.all
。@JosephLeBrech是的,MongoMapper将all
委托给query
,因此,它最终变成了PaymentLog.query.all
..query
是一个修饰的勇敢的::query
据我所知,根本没有范围。因为当我执行Object.first
或Object.last
时,它仍然会显示相同的对象。但是如何取消此范围?