我需要创建一个mongoid标准,它不会返回任何内容.我找不到任何“无”方法,所以我做的是Model.where(id:nil)或Model.any_in(id:nil).
但是这不好,还会查询数据库.
但是这不好,还会查询数据库.
我想将自己的选择器添加到mongoid,它将返回一个空结果,甚至不查询db(例如Model.none()),但不知道在哪里/如何做.有人可以帮忙吗?
解决方法
你在用什么版本的Mongoid?因为当我尝试Model.none时,它返回一个空集:
Model.none Model.none.count # => 0
版本4中未添加任何内容.如果无法更新到该版本,则可以尝试集成更改.需要定义at line 309 in /lib/mongoid.criteria.rb
的这些方法:
def none @none = true and self end def empty_and_chainable? !!@none end
Mongoid :: Contextual #create_context也需要to be changed:
def create_context return None.new(self) if empty_and_chainable? embedded ? Memory.new(self) : Mongo.new(self) end
然后你可以包括`/lib/mongoid/contextual/none.rb’.
编辑:this Gist backports .none
to Mongoid 3:
module Mongoid class Criteria def none @none = true and self end def empty_and_chainable? !!@none end end module Contextual class None include ::Enumerable # PrevIoUsly included Queryable,which has been extracted in v4 attr_reader :collection,:criteria,:klass def blank? !exists? end alias :empty? :blank? attr_reader :criteria,:klass def ==(other) other.is_a?(None) end def each if block_given? [].each { |doc| yield(doc) } self else to_enum end end def exists?; false; end def initialize(criteria) @criteria,@klass = criteria,criteria.klass end def last; nil; end def length entries.length end alias :size :length end private def create_context return None.new(self) if empty_and_chainable? embedded ? Memory.new(self) : Mongo.new(self) end end module Finders delegate :none,to: :with_default_scope end end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。