3

概念的には、2 つのモデルがあり、1 つにはデフォルトのスコープがあります

class Model
  default_scope where: "is_acitve = 1"
end

class SpecialUser
   has_many :model

   ## 1
   def model
     Model.unscoped { super }
   end
end

モデルのデフォルトのスコープをオーバーライドする場所をいくつか選択しようとしています-モデルの他の多くのユーザーが存在し、それらはすべてアクティブなモデルのみを表示する必要があります。非アクティブなケースにアクセスできるのは、ほんの一握りの特別なケースだけです。

方法#1で、このケースを処理できます

s = SpecialUser.find_by_id x
s.model  # <-- works for even is_active =0 cases.

しかし、(パフォーマンスのために)以下のようなことを試みると:

s = SpecialUser.includes(:model).where("id = 5")

デフォルトのスコープがクエリに挿入されます。

includes を使用している場合でも、デフォルトのスコープを回避する方法はありますか?

4

1 に答える 1