Ruby on rails Rails从所有Select*类型查询中隐藏特定记录

Ruby on rails Rails从所有Select*类型查询中隐藏特定记录,ruby-on-rails,ruby-on-rails-3,postgresql,activerecord,Ruby On Rails,Ruby On Rails 3,Postgresql,Activerecord,我在一个表中有一条记录,它作为某种占位符,并不代表实际数据。我知道这是一个糟糕的设计,但我有一些非常尴尬的要求,我必须处理,我没有看到其他解决方案,所以这本身就是一个修补程序 现在让我们假设我在整个应用程序中有一系列SELECT*s,我不想为每个SELECT*s都显式地排除单个记录。除了显式调用它的查询外,我是否可以在模型中添加任何内容以将其从所有查询中排除?或者我可以直接把一些逻辑放进我的PG数据库 这是表中ID为0的第一条记录 一种解决方案是定义一个默认的\u范围来排除这些记录,请参见 因此

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

现在让我们假设我在整个应用程序中有一系列SELECT*s,我不想为每个SELECT*s都显式地排除单个记录。除了显式调用它的查询外,我是否可以在模型中添加任何内容以将其从所有查询中排除?或者我可以直接把一些逻辑放进我的PG数据库


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

一种解决方案是定义一个默认的\u范围来排除这些记录,请参见

因此,在执行YourModel.all时,如果模型上的默认_作用域排除了正确的记录,您将得到所需的结果


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

一种解决方案是定义一个默认的\u范围来排除这些记录,请参见

因此,在执行YourModel.all时,如果模型上的默认_作用域排除了正确的记录,您将得到所需的结果


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

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

create view v as
select *
from t
where id != 0
现在从视图中选择:

select *
from v

创建不包含它的视图:

create view v as
select *
from t
where id != 0
现在从视图中选择:

select *
from v
添加默认范围

default_scope where('id != 0')
给你的模特

在任何情况下,若要避免某些查询中的默认范围,可以使用Model.unscoped。。。有…

添加默认范围

default_scope where('id != 0')
给你的模特


在任何情况下,若要避免某些查询中的默认范围,可以使用Model.unscoped。。。这里…

嗨,pjam,很近,但不是我想要的。我仍然需要能够访问我的占位符记录,我只是不希望它出现在没有特别要求的查询中。对于您的解决方案,它不会出现在一般的MyModel.all中,但是如果我通过它的ID值显式搜索它,它也会产生错误。有什么办法吗?嗨,pjam,很近,但不是我想要的。我仍然需要能够访问我的占位符记录,我只是不希望它出现在没有特别要求的查询中。对于您的解决方案,它不会出现在一般的MyModel.all中,但是如果我通过它的ID值显式搜索它,它也会产生错误。有办法吗?