Не используйте default_scope
.Он укусит вас сзади.
Единственный способ удалить область default_scope
- это использовать unscoped
, который, как вы уже поняли, удаляет все области - не только default_scope
.
Итак p.users.unscoped == User.all.unscoped
.
Пока вы можете сделать:
User.unscoped.where(product: p)
Это не позволяет вам загружать / включать ассоциацию, чтобы избежать N + 1 запросов.
Вместо default_scope
следует использовать явные области действия:
class User < ApplicationRecord
scope :not_guest, ->{ where.not(type: 'guest') }
end
Следует также избегать имени столбца type
, если только вы не используете его для наследования одной таблицы (STI).ActiveRecord использует его в некоторых случаях для определения класса записей, и это может привести к неожиданным ошибкам.