1

我在表格中有一条记录,用作各种占位符,不代表实际数据。我知道这是糟糕的设计,但我有一些非常尴尬的要求必须处理,而且我没有看到其他解决方案,所以它本身就是一个修补程序。

现在假设我在整个应用程序中有一系列 SELECT *s,我不想为它们中的每一个显式排除该单个记录。有什么我可以放入我的模型中以将其从所有查询中排除,除了明确调用它的那些?或者也许我可以将一些逻辑直接放入我的 PG 数据库中?

这是表中 ID 为 0 的第一条记录。

4

3 回答 3

3

一种解决方案是定义一个default_scope排除这些记录的方法,请参阅文档

所以在做的时候YourModel.all,如果default_scopeonYourModel排除了正确的记录,你会得到你想要的。

但正如你所说,这是糟糕的设计!

于 2012-10-31T17:42:19.007 回答
2

创建一个不包括它的视图:

create view v as
select *
from t
where id != 0

现在从视图中选择:

select *
from v
于 2012-10-31T17:43:43.717 回答
2

添加默认范围

default_scope where('id != 0')

对你的模型...

在任何情况下,您都想在某些查询中避免使用默认范围,您可以在Model.unscoped...那里...

于 2012-10-31T17:53:49.020 回答