Пропустить область по умолчанию для отношения в монгоиде

Как я могу пропустить область по умолчанию для отношений в монгоиде?

Проблема с мусором реализует мягкое удаление модели, а также добавляет следующее

field :d_at, type: DateTime
default_scope -> { where(d_at: nil) }      

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

class Product
  include Mongoid::Document
  field :title, type: String
  belongs_to :brand, class_name: 'Brand'
end

class Brand
  include Mongoid::Document
  include Concerns::Trashable
  field :title, type: String
end

Пример:

product = Product.find([id])
puts product.brand.inspect #This brand is soft-deleted and not fetched because of the default scope

Это работает, но больше ломает, чем исправляет

class Product
  include Mongoid::Document
  field :title, type: String
  belongs_to :brand, class_name: 'Brand'

  #unscope relation to brand
  def brand 
    Brand.unscoped.find(self.brand_id)
  end
end

person Sander Visser    schedule 22.10.2014    source источник
comment
Product.unscoped должен возвращать все записи о продуктах без применения какой-либо области действия.   -  person MrYoshiji    schedule 22.10.2014
comment
Но это удалит область действия по умолчанию из модели продукта, верно? Не объем от отношения между продуктом и брендом.   -  person Sander Visser    schedule 22.10.2014
comment
А как насчет Brand.unscoped.where(product_id: product.id) ?   -  person MrYoshiji    schedule 22.10.2014
comment
Это сработает, но таким образом я должен обрабатывать руководство по отношениям и изменять всю кодовую базу для получения отношений, так что это не вариант.   -  person Sander Visser    schedule 22.10.2014
comment
Это потому, что вы не должны использовать default_scope : rails-bestpractices.com/posts/806 -default_scope-is-evil   -  person MrYoshiji    schedule 22.10.2014
comment
Мы по-прежнему будем использовать область действия по умолчанию, потому что в текущей ситуации это не так уж плохо (лучше, чем писать Brand.without_deletes.all)   -  person Sander Visser    schedule 22.10.2014
comment
Это единственный случай при использовании мягкого удаления, потому что вы не хотите указывать, что хотите загружать только не удаленные материалы, а наоборот.   -  person Sander Visser    schedule 23.10.2014


Ответы (1)


В соответствии с исправлением Поддержка отмены определения области действия default_scope в ассоциациях с нетерпеливым_загрузом, вы можете пропустить область по умолчанию вручную, указав столбцы, которые будут игнорироваться в вашей ассоциации.

-> { unscope(where: :column_name) } 

Или вы можете использовать unscoped_associations.

person mohameddiaa27    schedule 11.11.2014
comment
Кажется, здесь не работает с монгоидом, мне нужно копнуть глубже и поиграть с ним. - person Sander Visser; 13.11.2014
comment
Судя по всему работает только с has_many. Я не смог заставить его работать с belongs_to. - person mohameddiaa27; 13.11.2014
comment
@mohameddiaa27 Прошло много времени, но вы смогли решить эту проблему? Я столкнулся с той же проблемой. - person Allen Liu; 19.05.2016