rails mongoid明确的标准

Mongoid :: Paranoia为生成标准的模型添加默认范围

#{"$exists"=>false}}, options: {}, class: Line, embedded: false> 

我可以找到生成的Model.deleted的已删除文档,

 #{"$exists"=>true}}, options: {}, class: Line, embedded: false> 

我如何覆盖这个,以便我可以搜索已删除和未删除的文档。

PS Model.unscoped不起作用

试试这个(它的黑客):

 class User include Mongoid::Document include Mongoid::Paranoia def self.ignore_paranoia all.tap {|criteria| criteria.selector.delete(:deleted_at)} end end # ignore paranoia is defined on model, so can't chain it to criteria or scopes # but it returns criteria, so can chain other scope and criteria to it User.ignore_paranoia.some_scope.where(:whatever => "my_custom_value") 

我已经开始使用:

  def self.all! Mongoid::Criteria.new self end 

但是self.nsnscoped似乎也有效。

试试这个

 def self.all_objects where(:deleted_at.in => [false, true]) end Model.all_objects 

UPD

deleted_at字段是一个日期时间字段,就像mongoid时间戳插入的默认的created_at字段一样,因此当检查[true,false]中的deleted_at时它会抛出exception,这是布尔值

 def self.all_objects where(:deleted_at=>{"$exists"=>false}).and(:deleted_at=>{"$exists"=>true}) end 

如果有人正在搜索从标准中删除其中一个范围的方法,您可以这样做:

 query = Item.published.before(DateTime.now).unblocked query.remove_scoping(Item.before(DateTime.now)) 

您可以在此之后链接条件以进行查询,因此它非常有用。