Ruby on rails Rails从所有Select*类型查询中隐藏特定记录
我在一个表中有一条记录,它作为某种占位符,并不代表实际数据。我知道这是一个糟糕的设计,但我有一些非常尴尬的要求,我必须处理,我没有看到其他解决方案,所以这本身就是一个修补程序 现在让我们假设我在整个应用程序中有一系列SELECT*s,我不想为每个SELECT*s都显式地排除单个记录。除了显式调用它的查询外,我是否可以在模型中添加任何内容以将其从所有查询中排除?或者我可以直接把一些逻辑放进我的PG数据库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范围来排除这些记录,请参见 因此
这是表中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值显式搜索它,它也会产生错误。有办法吗?