Как обойти default_scope? - PullRequest
       4

Как обойти default_scope?

14 голосов
/ 02 апреля 2012

У меня есть модель пользователя, которая имеет следующий default_scope:

default_scope where(account_id: Account.current_account.id)

Если я звоню User.all, я всегда получаю результат, основываясь на текущей учетной записи.

В некоторых случаях для целей администрирования я хотел бы обойти эту область и увидеть всех пользователей в системе независимо от учетной записи.

Есть ли способ сделать это?

Ответы [ 2 ]

23 голосов
/ 02 апреля 2012

Да, с без рамки .

User.unscoped.all
1 голос
/ 07 февраля 2018

В наши дни правильным подходом является использование unscope, которое удалит только явную часть области действия.Например:

class User < ActiveRecord::Base
  default_scope where(account_id: Account.current_account.id)
  scope :all_accounts, -> { unscope(:account_id) }
end

Это имеет значение при составлении нескольких областей.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...