ruby-on-rails – 不返回任何内容的Mongoid标准
发布时间:2020-12-17 03:23:53 所属栏目:百科 来源:网络整理
导读:我需要创建一个mongoid标准,它不会返回任何内容.我找不到任何“无”方法,所以我做的是Model.where(id:nil)或Model.any_in(id:nil). 但是这不好,还会查询数据库. 我想将自己的选择器添加到mongoid,它将返回一个空结果,甚至不查询db(例如Model.none()),但不
我需要创建一个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 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 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |