如何绕过default_scope,但仍然能够在Rails中使用命名作用域



我有一个用户模型,其中有一个default_scope来获取所有仍处于活动状态的用户。除了默认作用域之外,我还有命名作用域。我的用户模型看起来像:

default_scope{where(status:"active"(}

作用域:位置,->(location({where(location:location(}

对于特定的查询,我需要绕过default_scope并使用location-scope。我知道我可以使用unscoped绕过范围,但据我所知,unscope将绕过所有范围。

我该怎么做?

您可以绕过默认作用域,然后应用您的自定义作用域,如下所示:

User.unscoped.location('London')

不过,您确实需要按此顺序执行,否则(正如您所说(unscoped调用将删除之前调用的作用域。

此外,请考虑而不是以这种方式使用默认作用域。如果您想要(如本例中所示(检索不活动的用户,您将遇到问题。你最好有一个active作用域(也许还有一个inactive作用域(,当你想要这个限制时可以调用,而当你不想要的时候就不要调用了!这样,您的代码将更清楚地了解您希望返回的记录。

User.active.location('London')
User.inactive.location('London')
User.all.location('London')
etc.

就我个人而言,我只会使用默认范围按日期顺序对记录进行排序,因此firstlast会返回有用的结果(在使用uuid时很有用,因为与整数id不同,记录没有特定的顺序(。但有些人甚至会不同意!

最新更新