рельсы mongoid четкие критерии - PullRequest
       3

рельсы mongoid четкие критерии

6 голосов
/ 09 сентября 2011

Mongoid :: Паранойя добавляет область действия по умолчанию к модели, которая генерирует критерии

#<Mongoid::Criteria
  selector: {:deleted_at=>{"$exists"=>false}},
  options:  {},
  class:    Line,
  embedded: false>

Я могу найти удаленные документы с Model.deleted, который генерирует,

#<Mongoid::Criteria
  selector: {:deleted_at=>{"$exists"=>true}},
  options:  {},
  class:    Line,
  embedded: false>

Как мне переопределить это, чтобы я мог искать как удаленные, так и не удаленные документы.

PS Model.unscoped не работает

Ответы [ 4 ]

5 голосов
/ 09 сентября 2011

Попробуйте это (это своего рода взлом):

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")
2 голосов
/ 31 мая 2012

Я привык к использованию:

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

, но, кажется, тоже работает self.unscoped.

0 голосов
/ 27 августа 2014

Если кто-то ищет способ удалить одну из областей из критериев, вы можете сделать это следующим образом:

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

Вы можете связать критерии для запроса после этого, так что это действительно полезно.

0 голосов
/ 09 сентября 2011

Попробуйте это

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

Model.all_objects

UPD

поле selected_at является полем даты и времени, как и поля по умолчанию create_at, вставленные с помощью mongoid отметок времени, поэтому оно выдает исключение при проверке на удаленный_кат в [true, false], которые являются логическими

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