2012-10-31 26 views
1

我在充当各种各样的占位符表中的记录,并不代表实际的数据。这是糟糕的设计,我知道,但我有一些很尴尬的要求,我必须处理我也没有看到其他的解决方案,所以这是一个有点修补程序本身。Rails的隐藏特定的记录从所有选择*类型查询

现在可以说,我有一系列的SELECT * S在我的应用程序,我不希望有明确排除为他们每个人的那一条记录。有什么我可以放入我的模型,以排除它的所有查询,除了明确调用它的那些?或者,也许我可以直接把我的PG数据库中的一些逻辑?

这是在表中的第一个纪录的0.1

回答

2

添加默认范围

default_scope where('id != 0') 

到模型......

无论如何你w蚂蚁避免在某些查询中的默认范围,你可以有Model.unscoped...那里...

3

一个解决方案的ID是定义一个default_scope将排除这些记录,看到the doc

这样算下来YourModel.all时,如果default_scopeYourModel排除正确的记录,你会得到你想要的。

但正如你所说,这是不好的设计!

+0

嗨pjam,这是接近,但不是我正在寻找。我还需要能够访问我的占位符的记录,我只是不希望它出现在查询它是不是specificially要求。有了您的解决方案,将不会出现在一般的'MyModel.all',但它也产生一个错误,如果我明确地寻找它通过它的ID值。有什么办法呢? – Noz

+0

糟糕,没关系。拉胡尔提到了如何处理这个问题。 – Noz

2

创建一个视图中排除:

create view v as 
select * 
from t 
where id != 0 

现在从视图中选择:

select * 
from v