我在表格中有一条记录,用作各种占位符,不代表实际数据。我知道这是糟糕的设计,但我有一些非常尴尬的要求必须处理,而且我没有看到其他解决方案,所以它本身就是一个修补程序。
现在假设我在整个应用程序中有一系列 SELECT *s,我不想为它们中的每一个显式排除该单个记录。有什么我可以放入我的模型中以将其从所有查询中排除,除了明确调用它的那些?或者也许我可以将一些逻辑直接放入我的 PG 数据库中?
这是表中 ID 为 0 的第一条记录。
我在表格中有一条记录,用作各种占位符,不代表实际数据。我知道这是糟糕的设计,但我有一些非常尴尬的要求必须处理,而且我没有看到其他解决方案,所以它本身就是一个修补程序。
现在假设我在整个应用程序中有一系列 SELECT *s,我不想为它们中的每一个显式排除该单个记录。有什么我可以放入我的模型中以将其从所有查询中排除,除了明确调用它的那些?或者也许我可以将一些逻辑直接放入我的 PG 数据库中?
这是表中 ID 为 0 的第一条记录。
一种解决方案是定义一个default_scope
排除这些记录的方法,请参阅文档
所以在做的时候YourModel.all
,如果default_scope
onYourModel
排除了正确的记录,你会得到你想要的。
但正如你所说,这是糟糕的设计!
创建一个不包括它的视图:
create view v as
select *
from t
where id != 0
现在从视图中选择:
select *
from v
添加默认范围
default_scope where('id != 0')
对你的模型...
在任何情况下,您都想在某些查询中避免使用默认范围,您可以在Model.unscoped...
那里...