1

ある種のプレースホルダーとして機能するテーブルにレコードがあり、実際のデータを表していません。設計が悪いことはわかっていますが、対処しなければならない非常に厄介な要件がいくつかあり、他の解決策が見当たらなかったので、それ自体がちょっとしたホットフィックスです。

ここで、アプリケーション全体に一連の SELECT * があり、それぞれの単一レコードを明示的に除外する必要はないとします。明示的に呼び出されたクエリを除くすべてのクエリからモデルを除外するために、モデルにドロップできるものはありますか? それとも、PG データベースに直接入れることができるロジックでしょうか?

これは、ID が 0 のテーブル内の最初のレコードです。

4

3 に答える 3

3

default_scope1つの解決策は、これらのレコードを除外するを定義することです。ドキュメントを参照してください。

したがって、これを行うときにYourModel.alldefault_scopeonYourModelが正しいレコードを除外している場合は、必要なものを取得できます。

しかし、あなたが言ったように、それは悪いデザインです!

于 2012-10-31T17:42:19.007 に答える
2

それを除くビューを作成します。

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

次に、ビューから選択します。

select *
from v
于 2012-10-31T17:43:43.717 に答える
2

デフォルトのスコープを追加する

default_scope where('id != 0')

あなたのモデルに...

いずれにせよ、いくつかのクエリでそのデフォルトのスコープを避けたい場合は、Model.unscoped...そこに置くことができます...

于 2012-10-31T17:53:49.020 に答える