【问题标题】:Rails Hide Specific Record From All Select * Type QueriesRails 从所有选择 * 类型查询中隐藏特定记录
【发布时间】:2012-10-31 17:38:31
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    一种解决方案是定义一个 default_scope 来排除这些记录,请参阅 the doc

    所以在做YourModel.all时,如果YourModel上的default_scope排除了正确的记录,你会得到你想要的。

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

    【讨论】:

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

    添加默认范围

    default_scope where('id != 0')
    

    到你的模型...

    在任何情况下,您都希望在某些查询中避免使用默认范围,您可以在其中使用Model.unscoped......

    【讨论】:

      【解决方案3】:

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

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

      现在从视图中选择:

      select *
      from v
      

      【讨论】:

        猜你喜欢
        • 2021-12-03
        • 1970-01-01
        • 1970-01-01
        • 2012-07-13
        • 2022-01-03
        • 2021-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多