は、私は2つのモデルがあります:join/eager_loadのdefault_scopeをunscopeする方法は?
class User
default_scope -> { where(deleted_at: nil) }
end
class Order
belongs_to :user
end
を私は削除か削除されたユーザーとの注文を取得したい:これらの作業の
Order.joins(:user).merge(User.unscoped)
Order.joins(:user).merge(User.unscope(where: :deleted_at))
# SELECT "orders".* FROM "orders"
# INNER JOIN "users" ON "users"."id" = "orders"."user_id" AND "users"."deleted_at" IS NULL
# ORDER BY "orders"."id" DESC LIMIT 1
Order.eager_load(:user).merge(User.unscoped)
Order.eager_load(:user).merge(User.unscope(where: :deleted_at))
# SELECT "orders"."id" AS t0_r0, "orders"."user_id" AS t0_r1,
# "users"."id" AS t1_r0, "users"."deleted_at" AS t1_r1 FROM "orders"
# LEFT OUTER JOIN "users" ON "users"."id" = "orders"."user_id" AND "users"."deleted_at" IS NULL
# ORDER BY "orders"."id" DESC LIMIT 1
なし。
すべてのクエリは、 "AND"ユーザ "。" deleted_at "IS NULL"をjoin文に追加します。
私は協会のスコープを指定した場合、何も変わりません:予想通り
class Order
belongs_to :user, -> { unscoped }
end
しかし作品が含まれています
Order.includes(:user).merge(User.unscoped).last
# SELECT "orders".* FROM "orders" ORDER BY "orders"."id" DESC LIMIT 1
# SELECT "users".* FROM "users" WHERE "users"."id" = 1054
は、どのように私はレールが参加中の関連付けをunscopeすることができますか?
:http://api.rubyonrails.org/classes/ActiveRecord/Scoping/Default/ClassMethods.html #method-i-unscoped – lcguida
ありがとうございました。しかし、もし私が複数の関係を持っていれば、それを複数回ラップする必要があります。私はそれが他の方法でやり遂げることができるのだろうか? – Anton