Rails从所有选择*类型查询隐藏特定记录

时间:2012-10-31 17:38:32

标签: ruby-on-rails ruby-on-rails-3 postgresql activerecord

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

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

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

3 个答案:

答案 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... ...