gpt4 book ai didi

ruby-on-rails - Rails 在关联查询时跳过 default_scope

转载 作者:行者123 更新时间:2023-12-03 08:57:52 25 4
gpt4 key购买 nike

如何在rails控制台中查询时跳过default_scope

例如

class User < ActiveRecord::Base
default_scope do
where("type != 'guest'")
end
end

查询就像关联

例如

p = Product.last
p.users.where("...")

我需要跳过用户的default_scope。我尝试了p.users.unscoped,但它获取了所有用户(不仅与产品相关)

最佳答案

不要使用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 使用它来确定类从数据库结果实例化是否可能导致意外错误。如果您想使用该列名称,请确保将继承列设置为其他名称:

class User < ApplicationRecord
self.inheritance_column = :not_type
end

关于ruby-on-rails - Rails 在关联查询时跳过 default_scope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53646635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com