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